US20180285830A1
2018-10-04
16/002,675
2018-06-07
In some embodiments, the present invention provides for a computer-implemented method, including at least the following steps to be performed by a specifically programmed computer processor of a schedule management computer system: electronically causing to display a specialized schedule GUI; where the specialized schedule GUI is configured to allow each user to: define a programmed schedule object, including a plurality of availability time periods (TimeWindows); each having TimeWindow parameters, and identifying when a time period is available or unavailable for booking; where the TimeWindow parameters include: a start date, a start time, an end time, at least one day of a week, and a period type; electronically and in real-time, generating a bitmask of days in a week for each TimeWindow of the TimeWindows; electronically and in real-time, storing schedule objects associated with the users in a specifically dedicated database.
Get notified when new applications in this technology area are published.
G06Q10/1095 » CPC main
Administration; Management; Office automation, e.g. computer aided management of electronic mail or groupware ; Time management, e.g. calendars, reminders, meetings or time accounting; Time management, e.g. calendars, reminders, meetings, time accounting; Calendar-based scheduling for a person or group Meeting or appointment
G06F3/1454 » CPC further
Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements; Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay
H04M2242/15 » CPC further
Special services or facilities Information service where the information is dependent on the location of the subscriber
G06Q10/063 » CPC further
Administration; Management; Resources, workflows, human or project management, e.g. organising, planning, scheduling or allocating time, human or machine resources; Enterprise planning; Organisational models Operations research or analysis
G06Q10/10 IPC
Administration; Management Office automation, e.g. computer aided management of electronic mail or groupware ; Time management, e.g. calendars, reminders, meetings or time accounting
G06F3/0482 » CPC further
Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements; Input arrangements or combined input and output arrangements for interaction between user and computer; Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance Interaction with lists of selectable items, e.g. menus
G06F3/0484 » CPC further
Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements; Input arrangements or combined input and output arrangements for interaction between user and computer; Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
G06F3/14 IPC
Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements Digital output to display device ; Cooperation and interconnection of the display device with other functional units
G06Q10/06 IPC
Administration; Management Resources, workflows, human or project management, e.g. organising, planning, scheduling or allocating time, human or machine resources; Enterprise planning; Organisational models
H04M1/725 » CPC further
Substation equipment, e.g. for use by subscribers; Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection Cordless telephones
This application claims the priority of U.S. provisional patent application No. 62/077,751; filed Nov. 10, 2014; entitled âSYSTEM AND METHOD FOR PERMITTING A USER TO QUERY A LARGE NUMBER OF STORED SCHEDULES FOR A LIMITED NUMBER OF POTENTIALLY AVAILABLE TIME SLOTS,â which is incorporated herein by reference in its entirety for all purposes.
In some embodiments, the present invention is related to specifically programmed computer-implemented engine systems for real-time on-demand discovery of available time slots across programmed schedule objects and methods of use thereof.
Interaction with schedules covering large scale data sets is ubiquitous. Activities that require specific systems and processes to interact with such schedules include but are not limited to, appointments (e.g., medical, dental, spa, professional, training, etc.), bookings (e.g., time slots for space, sport (golf, tennis, squash)), reservations (e.g., hotels), rentals(e.g., car, vacation, equipment), invitations (e.g., business, parties), social gatherings, sports leagues, etc.
In some embodiments, the present invention provides for a computer-implemented method, including at least the steps of: electronically causing, via a computer network, by at least one specifically programmed computer processor of a schedule management computer system executing software to perform the method, to display a first specialized schedule graphical user interface (a first specialized schedule GUI) on a screen of each computing device associated with each user of a plurality of users; where the first specialized schedule GUI is configured to allow each user to: i) define at least one programmed schedule object, including a plurality of availability time periods (a plurality of TimeWindows), and ii) associate at least one programmed schedule object with at least one of: 1) at least one user, 2) at least one resource, and 3) at least one service; where each TimeWindow is: i) defined by a plurality of TimeWindow parameters, and ii) configured to identify whether a corresponding time period is available for booking or unavailable for booking; where the plurality of TimeWindow parameters include: i) at least one first TimeWindow parameter, identifying a start date for the corresponding time period, ii) at least one second TimeWindow parameter, identifying a start time for the corresponding time period, iii) at least one third TimeWindow parameter, identifying an end time for the corresponding time period, iv) at least one fourth TimeWindow parameter, identifying at least one day of a week associated with the corresponding time period, and v) at least one fifth TimeWindow parameter, identifying a period type of the corresponding time period; electronically and in real-time, generating, by the at least one specifically programmed computer processor, based, at least in part, on the at least one fourth TimeWindow parameter, a first bitmask of days in a week for the corresponding time period of each TimeWindow of the plurality of TimeWindows; electronically and in real-time, storing, by the at least one specifically programmed computer processor, a plurality of schedule objects associated with the plurality of users in at least one specifically dedicated database; electronically causing, via the computer network, by the at least one specifically programmed computer processor, to display a second specialized schedule graphical user interface (a second specialized schedule GUI) on a screen of a computing device associated with a particular user, where the second specialized schedule GUI is configured to allow each user to submit an electronic query seeking to determine when a particular time period associated with at least one user is available for booking or unavailable for booking; electronically receiving, via the computer network, by the at least one specifically programmed computer processor, the electronic query of the particular user; electronically and in real-time, determining, by the at least one specifically programmed computer processor, based on the electronic query of the particular user, a set of TimeWindows selected from the plurality of schedule objects related to at least one of 1) the at least one user, 2) the at least one resource, and 3) the at least one service; electronically and in real-time, determining, by the at least one specifically programmed computer processor, based on the electronic query of the particular user, a set of TimeWindows selected from the plurality of schedule objects related to at least one of 1) the at least one user, 2) the at least one resource, and 3) the at least one service; electronically and in real-time, generating, by the at least one specifically programmed computer processor, a union structure of the set of TimeWindows; electronically and in real-time, determining, by the at least one specifically programmed computer processor, based on the first bitmask associated with each TimeWindow of the set of TimeWindows, a second bitmask corresponding to the at least one union; electronically and in real-time, determining, by the at least one specifically programmed computer processor, an intersection structure between the union and the electronic query of the particular user to identify at least one matched day of the week between the at least one union and the particular time period identified in the electronic query of the particular user; electronically and in real-time, determining, by the at least one specifically programmed computer processor, when the at least one matched day of the week includes the particular time period identified in the electronic query of the particular user, based, at least in part, on: 1) the at least one second TimeWindow parameter of a particular TimeWindow associated with the at least one matched day of the week; 2) the at least one third TimeWindow parameter of the particular TimeWindow associated with the at least one matched day of the week; 3) the at least one second TimeWindow parameter of the particular time period identified in the electronic query of the particular user; and 4) the at least one third TimeWindow parameter of the particular time period identified in the electronic query of the particular user; and electronically and in real-time, performing, by the at least one specifically programmed computer processor, one of: i) booking the particular time period for the particular user when the at least one matched day of the week includes the particular time period identified in the electronic query of the particular user; and ii) generating an indication identifying that the particular time period is unavailable for booking when the at least one matched day of the week excludes the particular time period identified in the electronic query of the particular user.
In some embodiments, the exemplary method of the present invention further includes at least: electronically and in real-time, storing, by the at least one specifically programmed computer processor, the union structure and the intersection structure in the at least one specifically dedicated database.
In some embodiments, the plurality of parameters further include at least one sixth parameter, identifying an end date for the corresponding time period. In some embodiments, the period type of the corresponding time period is selected from the group consisting of: once, daily, weekly, monthly, quarterly, and yearly. In some embodiments, the plurality of parameters further include at least one seventh parameter, identifying a particular date or a particular day which is within the corresponding time period having the period type of monthly or yearly. In some embodiments, the plurality of parameters further include at least one eighth parameter, identifying a frequency of the corresponding time period. In some embodiments, the plurality of parameters further include at least one ninth parameter, identifying an interval for the frequency of the corresponding time period. In some embodiments, the union structure is based on a logical OR operation with the set of TimeWindows. In some embodiments, the intersection structure is based on a logical AND operation.
In some embodiments, the present invention provides for a specifically programmed schedule management computer system, including at least: at least one specialized computer machine, including: a non-transient memory, electronically storing particular computer executable program code; and at least one computer processor which, when executing the particular program code, becomes a specifically programmed computer processor of the specifically programmed schedule management computer system that is configured to concurrently perform at least the following operations: electronically causing, via a computer network, to display a first specialized schedule graphical user interface (a first specialized schedule GUI) on a screen of each computing device associated with each user of a plurality of users; where the first specialized schedule GUI is configured to allow each user to: i) define at least one programmed schedule object, including a plurality of availability time periods (a plurality of TimeWindows), and ii) associate at least one programmed schedule object with at least one of: 1) at least one user, 2) at least one resource, and 3) at least one service; where each TimeWindow is: i) defined by a plurality of TimeWindow parameters, and ii) configured to identify whether a corresponding time period is available for booking or unavailable for booking; where the plurality of TimeWindow parameters include: i) at least one first TimeWindow parameter, identifying a start date for the corresponding time period, ii) at least one second TimeWindow parameter, identifying a start time for the corresponding time period, iii) at least one third TimeWindow parameter, identifying an end time for the corresponding time period, iv) at least one fourth TimeWindow parameter, identifying at least one day of a week associated with the corresponding time period, and v) at least one fifth TimeWindow parameter, identifying a period type of the corresponding time period; electronically and in real-time, generating, based, at least in part, on the at least one fourth TimeWindow parameter, a first bitmask of days in a week for the corresponding time period of each TimeWindow of the plurality of TimeWindows; electronically and in real-time, storing a plurality of schedule objects associated with the plurality of users in at least one specifically dedicated database; electronically causing, via the computer network, to display a second specialized schedule graphical user interface (a second specialized schedule GUI) on a screen of a computing device associated with a particular user, where the second specialized schedule GUI is configured to allow each user to submit an electronic query seeking to determine when a particular time period associated with at least one user is available for booking or unavailable for booking; electronically receiving, via the computer network, the electronic query of the particular user; electronically and in real-time, determining, based on the electronic query of the particular user, a set of TimeWindows selected from the plurality of schedule objects related to at least one of 1) the at least one user, 2) the at least one resource, and 3) the at least one service; electronically and in real-time, determining, based on the electronic query of the particular user, a set of TimeWindows selected from the plurality of schedule objects related to at least one of 1) the at least one user, 2) the at least one resource, and 3) the at least one service; electronically and in real-time, generating a union structure of the set of TimeWindows; electronically and in real-time, determining, based on the first bitmask associated with each TimeWindow of the set of TimeWindows, a second bitmask corresponding to the at least one union; electronically and in real-time, determining an intersection structure between the union and the electronic query of the particular user to identify at least one matched day of the week between the at least one union and the particular time period identified in the electronic query of the particular user; electronically and in real-time, determining when the at least one matched day of the week includes the particular time period identified in the electronic query of the particular user, based, at least in part, on: 1) the at least one second TimeWindow parameter of a particular TimeWindow associated with the at least one matched day of the week; 2) the at least one third TimeWindow parameter of the particular TimeWindow associated with the at least one matched day of the week; 3) the at least one second TimeWindow parameter of the particular time period identified in the electronic query of the particular user; and 4) the at least one third TimeWindow parameter of the particular time period identified in the electronic query of the particular user; and electronically and in real-time, performing one of: i) booking the particular time period for the particular user when the at least one matched day of the week includes the particular time period identified in the electronic query of the particular user; and ii) generating an indication identifying that the particular time period is unavailable for booking when the at least one matched day of the week excludes the particular time period identified in the electronic query of the particular user.
The present invention can be further explained with reference to the attached drawings, wherein like structures are referred to by like numerals throughout the several views. The drawings shown are not necessarily to scale, with emphasis instead generally being placed upon illustrating the principles of the present invention. Therefore, specific structural and functional details disclosed herein are not to be interpreted as limiting, but merely as a representative basis for teaching one skilled in the art to variously employ the present invention.
FIG. 1A is a representation of a software implementation related to a schedule S for a person P in accordance with some principles of some embodiments the present invention;
FIGS. 1B, 1C and 1D are flow charts showing programmed process flow in accordance with some principles of some embodiments of the present invention;
FIGS. 1E, 1F, 1G, 1H, 1I and 1J are diagrams representative of programmed Union and Intersection software objects that are relied upon in various locations within FIGS. 1B, 1C and 1D;
FIG. 2A is a representation of a software implementation related to a schedule S including an expanded number of bookings, and FIG, 2B is a flow chart showing programmed process flow in accordance with some principles of some embodiments of the present invention, for example, executing a sample query of the schedule S in FIG. 2A;
FIG. 3A is a representation of a software implementation related to a schedule S including an expanded number of bookings in accordance with some principles of some embodiments of the present invention, and FIG. 3B is a flow chart showing a programmed process flow representative for a specifically programmed sample query of the schedule S in FIG. 3A;
FIG. 4 is a schematic diagram of software implementation related to example schedules and a sample of a specifically programmed user graphical interface in accordance with some principles of some embodiments of the present invention
FIG. 5 is a block diagram of a exemplary specifically programmed engine computer system in accordance with some principles of some embodiments of the present invention; and
FIG. 6 is a block diagram in accordance with some principles of some embodiments of the present invention.
Among those benefits and improvements that have been disclosed, other objects and advantages of this invention can become apparent from the following description taken in conjunction with the accompanying figures. Detailed embodiments of the present invention are disclosed herein; however, it is to be understood that the disclosed embodiments are merely illustrative of the invention that may be embodied in various forms. In addition, each of the examples given in connection with the various embodiments of the present invention is intended to be illustrative, and not restrictive.
Throughout the specification, the following terms take the meanings explicitly associated herein, unless the context clearly dictates otherwise. The phrases âin one embodimentâ and âin some embodimentsâ as used herein do not necessarily refer to the same embodiment(s), though it may. Furthermore, the phrases âin another embodimentâ and âin some other embodimentsâ as used herein do not necessarily refer to a different embodiment, although it may. Thus, as described below, various embodiments of the invention may be readily combined, without departing from the scope or spirit of the invention.
In addition, as used herein, the term âorâ is an inclusive âorâ operator, and is equivalent to the term âand/or,â unless the context clearly dictates otherwise. The term âbased onâ is not exclusive and allows for being based on additional factors not described, unless the context clearly dictates otherwise. In addition, throughout the specification, the meaning of âa,â âan,â and âtheâ include plural references. The meaning of âinâ includes âinâ and âon.â
It is understood that at least one aspect/functionality of various embodiments described herein can be performed in real-time and/or dynamically. As used herein, the term âreal-timeâ is directed to an event/action that can occur instantaneously or almost instantaneously in time when another event/action has occurred. In some embodiments, the terms âinstantaneous,â âinstantaneously,â âinstantly,â and âin real timeâ refer to a condition where a time difference between a first time when a search request is transmitted and a second time when a response to the request is received is no more than 1 second. In some embodiments, the time difference between the request and the response is between less than 1 second and several seconds (e.g., 5-10 seconds).
As used herein, the term âdynamic(ly)â means that events and/or actions can be triggered and/or occur without any human intervention. In some embodiments, events and/or actions in accordance with the present invention can be in real-time and/or based on a predetermined periodicity of at least one of: nanosecond, several nanoseconds, millisecond, several milliseconds, second, several seconds, minute, several minutes, hourly, several hours, daily, several days, weekly, monthly, etc.
In some embodiments, the inventive electronic systems includes electronic mobile devices (e.g., smartphones, etc.) of users and server(s) in the distributed network environment, communicating over a suitable data communication network (e.g., the Internet, etc.) and utilizing at least one suitable data communication protocol (e.g., IPX/SPX, X.25, AX.25, AppleTalk, TCP/IP (e.g., HTTP), etc.).
In some embodiments, an exemplary specifically programmed computer-implemented engine of the present invention operates utilizing software constructs of TimeWindows of available (or unavailableâbooked) time (e.g., coded objects) to represent a Schedule (e.g., an electronic calendar). For example, each TimeWindow construct (e.g., programmed object/routine) has a Period feature of a particular type. Then, each Period has a DayGroup property which is a bitmask of days of the week that this Period falls on as explained further therein. In some embodiments, the Periods features can have additional properties that determine if a user is interested in an Interval property to be defined (e.g., every other, every third, etc.) and/or a particular Occurrence to be defined (first, second, third, second from last, etc.)
For example, a particular Schedule could consist of âevery Tuesday and Thursday every week, as well as every first Monday of the monthâ availability data. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention transforms this Schedule to represent it with two TimeWindows objects/data constructs:
In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention is configured to have Periods objects to be limited to a particular Day. Then, the exemplary specifically programmed computer-implemented engine of the present invention transforms the Schedule to represent it with TimeWindows objects/data constructs as:
So if the exemplary specifically programmed computer-implemented engine of the present invention executes a query for availability on Tuesday, a result could be determined by employing intersection of Tuesday with the union of all TimeWindows (TWs).
In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention executes a query for availability on Tuesday by avoiding the DayGroup bitmask processing by designating Periods object to only fall on a particular Day, resulting in TimeWindows objects/data constructs represented as:
In this case, if the exemplary specifically programmed computer-implemented engine of the present invention executes a query for availability on Tuesday, a result could be determined but would have to rely on exact matching of Tuesday with the Period Day of each TW, rather than employing intersection of Tuesday with the union of all TWs. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention is configured to rely on exact matching of requested dates against each TW of a Schedule.
FIG. 1A is a representation of a software implementation (such as programmable datasets) related to an example schedule S for a person P in accordance with some principles of some embodiments of the present invention. In this example, S includes two âtime windowâ sets that each represent attributes (e.g., day(s) of the week, start/end time and start date, etc.) of available time, and two time window sets that each represent attributes of unavailable (booked) time. In some embodiments, the attributes start date and start/end time can be represented as in conventional scheduling systems, e.g., date code and military time. In some embodiments, the days of the week within each time window set are represented as a âdaygroupâ set. As shown in FIG. 1A, in some embodiments, the daygroup set is a seven-slot bit string representation of the days of the week that could have availability, with Sunday being the least significant bit. In the depicted example a black square indicates that this position bit has a value of â1â, or âONâ, and a white square indicates a value of â0â or âOFFâ.
FIGS. 1B, 1C and 1D are flow charts showing sample schematics representative of programmed computer queries for specific day and time slots based on the schedule S represented by time window sets 1, 2, 3 and 4. In addition, FIGS. 1E, 1F, 1G, 1H, 1I and 1J are diagrams representative of bitwise logical OR (union) and AND (intersection) programmed computer operations used in these sample queries.
As used herein, logical conjunction (AND) is a computer-executed operation on two logical values, typically the values of two propositions, that produces a value of true if both of its operands are true. The truth table, Table 1, for p AND q (also written as pâ§q, Kpq, p & q, or p·q) is as follows:
| TABLE 1 |
| Logical Conjunction |
| p | q | p â§ q |
| T | T | T |
| T | F | F |
| F | T | F |
| F | F | F |
For example, if both p and q are true, then the conjunction pâ§q is true. For all other assignments of logical values to p and to q the conjunction pâ§q is false. It can also be said that if p, then pâ§q is q, otherwise pâ§q is p. For example, where p and q are data bits, the syntax for pâ§q in the Ruby programming language is: p & q.
As used herein, logical disjunction (OR) is an operation on two logical values, typically the values of two propositions, that produces a value of true if at least one of its operands is true.
The truth table, Table 2, for p OR q (also written as pâ§q, Apq, pâ„q, or p+q) is as follows:
| TABLE 2 |
| Logical Disjunction |
| p | q | p âš q |
| T | T | T |
| T | F | T |
| F | T | T |
| F | F | F |
For example, if p, then pâ§q is p, otherwise pâ§q is q. For example, where p and q are data bits, the syntax for pâ§q in the Ruby programming language is: p|q.
For example, in case of operations represented in FIG. 1E (âIntersection of TimeWindow Daygroupsâ), in the âBitwise Logical AND of Daygroupsâ operation, the inputs can be represented as bitmasks of â0000100â (when Sunday corresponds to the right-most bit) and â0111110â, respectively; and, then, the AND (intersection) operation produces the output which is represented by the bitmask of â0000100â. In another example, in case of operations represented in FIG. 1I (âUnion of TimeWindow Daygroupsâ) â§â§Vâin the âBitwise Logical OR of Daygroupsâ operation, the inputs can be represented as bitmasks of â0101010â and â0010100â, respectively; and, then, the OR (union) operation produces the output which is represented by the bitmask of â0111110â.
In the query of FIG. 1B, a user is utilizing the exemplary specifically programmed computer-implemented engine of the present invention to real-time, on-demand inquire (12) about availability of P on a specific day and time slot. The exemplary specifically programmed computer-implemented engine of the present invention then finds all advertised time windows (14). In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention executes a bitwise logical OR operation on all of the daygroup bit-string representations of advertised time, shown in FIG. 1I and in FIG. 1B (16), to compute a union U of time windows, and in particular daygroups. In some embodiments, this union construct and/or discovered results from this union execution, âEX1U,â can be reused in other queries such that the bitwise logical OR operation need not be performed for subsequent user queries, but can be retrieved from the computer memory. For example, in some embodiments, after a predetermined period of time passed since the execution of a particular construct (e.g., Union object, Intersection object), the discovered results are no longer utilized for subsequent querying.
In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention then executes a bitwise logical AND operation on the daygroup of the union previously determined or retrieved from memory, and the daygroup of the query, to compute an intersection â©. For example, the exemplary specifically programmed computer-implemented engine of the present invention executes querying in accordance with bit-string representations of the union daygroup and of the query daygroup, shown in FIGS. 1E and 1B (18).
If the intersection returns an available day of week, the process flow continues to subsequent steps including but not limited to: comparison of available hours in the day that the intersection occurs on with the query hour, comparison with date value, and any other steps that could be necessary to complete the search aspect of the scheduling application. However, if no available day of week exists, i.e., the intersection at step (18) returns a null value, the process ends. Accordingly, as discussed above, the exemplary specifically programmed computer-implemented engine of the present invention does not need to perform the actual date comparisons and the time of day comparisons on unnecessary data sets.
In the example of FIG. 1B, the exemplary specifically programmed computer-implemented engine of the present invention determines, at an hour-comparison step, that the query hour is not within the available hours on the day that the intersection occurs, so the process flow ends, e.g., with a ânot availableâ message delivered to the user, or a suitable indicator stored in a queue in a process flow involving a set of queries.
In the query of FIG. 1C, a user is utilizing the exemplary specifically programmed computer-implemented engine of the present invention to inquire (12) about availability of P on a specific day and time slot. The exemplary specifically programmed computer-implemented engine of the present invention then finds all advertised time windows (14). In the example query of FIG. 1C, the time windows were previously subjected to a bitwise logical OR operation and union EX1U was computed and stored, thus step (16) of FIG. 1B and the process sequence of FIG. 1I need not be repeated (unless the set of advertised time windows changes for the given P). In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention queries, periodically at a predetermined time interval and/or in real-time, to assess if the set of advertised time windows has changed. In a following step (18), the exemplary specifically programmed computer-implemented engine of the present invention then executes a bitwise logical AND operation of the daygroup union EX1U and the query daygroup to obtain an intersection â©. In this example, the intersection returns a particular day, and the corresponding attributes concerning the hours of the day within that intersection day are shown. In the query of FIG. 1C, the exemplary specifically programmed computer-implemented engine of the present invention determines in the hour comparison step (20) that the query hour is within the available hours on the day that the time window intersection (18) occurs. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention can ignore certain attributes including time of day and actual date until they are required at later stages of the flow.
In examples in which schedule S (FIG. 1A) contains time windows representative of unavailable time, based on the query flow in FIG. 1C, the exemplary specifically programmed computer-implemented engine of the present invention continues to determine whether the queried time slot is unavailable. In the example, schedule S (FIG. 1A) contains time window sets #3 and #4 indicative of unavailable (booked) time. These are identified (24) by the exemplary specifically programmed computer-implemented engine of the present invention in the process flow of FIG. 1C, and the exemplary specifically programmed computer-implemented engine of the present invention determines a union âȘ of these unavailable time window (24a), as detailed in FIG. 1J. In some embodiment, the exemplary specifically programmed computer-implemented engine of the present invention executes a bitwise logical OR operation on all of the daygroup bit-string representations of unavailable time windows. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention then can reuse the resulting union dataset in other queries (not shown).
In a following step (26), the exemplary specifically programmed computer-implemented engine of the present invention executes a bitwise logical AND operation on the union previously determined (24) or retrieved from memory (not shown), and the daygroup of the query (see FIG. 1G), to compute an intersection â©.
If the intersection of unavailable days results in the null determination, a query response can be returned to the user, stored, and/or passed to another step indicating that the requested query is available (based on the prior determination in step (20)). On the other hand, if the set returns one or more intersections, the the exemplary specifically programmed computer-implemented engine of the present invention continues, step (28), to determine whether the query hour on the intersection day is available.
As shown in FIG. 1G, TW3 and TW4, being unavailable, are considered ânegativeâ values. Therefore, when TW3 having a time range of [1500-1700] is unioned with the query range of [900-1700] the result is [900-1500]. The negative values of TW3 results in its time range being subtracted.
FIG. 1D shows a process flow similar to that of FIG. 1C with a different query so that the determination at step (28) returns an âunavailableâ result.
FIGS. 2A, 2B, 3A and 3B show additional examples using the herein systems and processes. Of course, a person having ordinary skill in the art would appreciate that the herein systems and processes of the present invention as described herein are able to query a numerous number of stored schedules for a number of potentially available time slots to identify available time slots which would otherwise not be available due to availability time slot mismatching.
FIG. 2A is another example of a data object representing a schedule S for a person P. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention can utilize the software object representing the schedule S. In this example, the software object S can include four âtime windowâ data object sets where each set has programmed attributes (day(s) of the week, start/end time and start date) of available time. For example, the attributes start date and start/end time can be represented as in conventional scheduling systems, e.g., date code and military time. The days of the week within each time window set are represented as a âdaygroupâ set. As shown in FIG. 2A, the daygroup set is a seven-slot bit string representation of the days of the week that could have availability, with Sunday being the least significant bit. In the depicted example a black square indicates that this position bit has a value of â1â, or âONâ, and a white square indicates a value of â0â or âOFFâ.
In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention utilizes the binary representation of a daygroup to union all available TimeWindows first, resulting in only one necessary comparison between desired date and union of all TimeWindows in order to answer a query.
FIG. 2B, is a flow charts showing a sample query being executed by the exemplary specifically programmed computer-implemented engine of the present invention for specific day and time slots based on the schedule S represented by time window sets 1, 2, 3 and 4: Is P available Wednesday, Feb. 5, 2014 at 1200? A process flow for such query is represented in FIG. 2B.
In the query of FIG. 2B, a user utilizes the exemplary specifically programmed computer-implemented engine of the present invention to inquire about availability of P on a specific day and time slot. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention then determines all advertised time windows (TimeWindows (TWs)). In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention executes a bitwise logical OR operation on all of the daygroup bit-string representations of advertised time to compute a union âȘ of time windows, and in particular daygroups. This union can be reused by the exemplary specifically programmed computer-implemented engine of the present invention in other queries on the same schedule S of FIG. 2A, such that the bitwise logical OR operation need not be performed for subsequent user queries, but can be retrieved from memory (e.g., permanent and/or temporary computer storage).
In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention executes a bitwise logical AND operation on the daygroup of the union previously determined or retrieved from memory, and the daygroup of the query, to compute an intersection â©. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention executes in accordance with bit-string representations of the union daygroup and of the query daygroup. If the intersection returns an available day of week, the exemplary specifically programmed computer-implemented engine of the present invention continues to execute subsequent steps including but not limited to: comparison of available hours in the day that the intersection occurs on with the query hour, comparison with date value, and any other steps that could be necessary to complete the search aspect of the scheduling application. However, if no available day of week exists, as in the example query in FIG. 2B, the intersection at step returns an empty set or a null value, the exemplary specifically programmed computer-implemented engine of the present invention then stops the execution and can return an indication of such outcome (e.g., a ânot availableâ alert/message delivered to the user), and/or assign/associated/store a suitable indicator e, for example, in a queue in a process flow involving a set of queries.
FIG. 3A is a representation of another example of a software execution performed by the exemplary specifically programmed computer-implemented engine of the present invention regarding a schedule S for a person P. In this example, S includes one âtime windowâ set that represents attributes (day(s) of the week, start/end time and start date) of available time, and four time window sets that each represent attributes of unavailable (booked) time. The attributes start date and start/end time can be represented as in conventional scheduling systems, e.g., date code and military time. The days of the week within each time window set are represented as a âdaygroupâ set. As shown in FIG. 3A, the daygroup set is a seven-slot bit string representation of the days of the week that could have availability, with Sunday being the least significant bit. In the depicted example a black square indicates that this position bit has a value of â1â, or âONâ, and a white square indicates a value of â0â or âOFFâ.
In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention utilizes the binary representation of a daygroup to union all unavailable TimeWindows and subtract that union from the set of available days in order to determine if a desired date is still available.
In examples in which schedule S (FIG. 3A) contains time windows representative of unavailable time, the query flow in FIG. 3B proceeds similar to that of FIG. 2B. As shown in FIG. 3B, the intersection â© of the desired query data with the TimeWindow#1 returns a non-empty set, i.e., an availability. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention then determines whether the query time of day is within the TimeWindow #1 attributes. In the example of FIG. 3B, the query time of day is available based on the TimeWindow #1 attributes.
In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention continues (the upper left portion of the flow diagram in FIG. 3B) to determine whether the queried time slot is unavailable. In the example, schedule S (FIG. 3A) contains time window sets #2, #3, #4 and #5 indicative of unavailable (booked) time. These are identified in the process flow of FIG. 3B, and a union â© of these unavailable time window is obtained. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention executes a bitwise logical OR operation on all of the daygroup bit-string representations of unavailable time windows. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention can reuse the resulting union in other queries (not shown) that search the same schedule S (i.e., until new bookings arise thus requiring additional TimeWindows representative of unavailable time). Then, in some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention can execute a bitwise logical AND operation on the union previously determined or retrieved from memory (not shown), and the daygroup of the query, to compute an intersection â©. If the intersection of unavailable days results in the null determination, a query response can be returned to the user, stored, and/or passed to another step indicating that the requested query is available). On the other hand (not shown in FIG. 3B), if the set returns one or more intersections, the exemplary specifically programmed computer-implemented engine of the present invention is configured to continue to determine whether the query hour on the intersection day is available.
FIG. 4 is a schematic diagram of example schedules and a sample specifically programmed updateable user graphical interface caused to be generated by the exemplary specifically programmed computer-implemented engine of the present invention. In the data representation portion of FIG. 4, example schedules are set forth including âAvailability 1,â âAvailability 2,â âUnavailability 1,â and âUnavailability 2.â In the availability portions, the daygroup is represented by the days of the week that could have availability, with a black square indicating this position it has a value of 1, or âON,â and a white square indicates a value of 0, or âOFF.â In the unavailability portions, this example schedule is modified as compared to the previous depictions. In this representation, unavailability is represented by, for example but not limited to, black lines within the square corresponding to particular appointment times. In the exemplary specifically programmed updateable availability user graphical interface for the user, the exemplary specifically programmed computer-implemented engine of the present invention utilizes we can see in this example that there is no availability on Wednesday (a white block), there is availability for the entire Thursday, and there were periods of availability and periods of unavailability on Friday. The representative block for Friday is the availability for Friday minus the unavailability for Friday. In some embodiments, the exemplary specifically programmed computer-implemented engine of the present invention is configured to allow the user to book a particular available time slot.
An exemplary block diagram of a computer system 80 by which the scheduling modules of the present invention can be implemented is shown in FIG. 5. Computer system 80 includes a processor 82, such as a central processing unit, an input/output interface 90 and support circuitry 92. In certain embodiments, where the computer 80 requires a direct human interface, a display 96 and an input device 98 such as a keyboard, mouse or pointer are also provided. The display 96, input device 98, processor 82, and support circuitry 92 are shown connected to a bus 94 which also connects to a memory 88. Memory 88 includes program storage memory 111 and data storage memory 191. Note that while computer 80 is depicted with direct human interface components display 96 and input device 98, programming of modules and exportation of data can alternatively be accomplished over the interface 90, for instance, where the computer 80 is connected to a network and the programming and display operations occur on another associated computer, or via a detachable input device as is known with respect to interfacing programmable logic controllers.
Program storage memory 111 and data storage memory 191 can each comprise volatile (RAM) and non-volatile (ROM) memory units and can also comprise hard disk and backup storage capacity, and both program storage memory 111 and data storage memory 191 can be embodied in a single memory device or separated in plural memory devices. Program storage memory 111 stores software program modules and associated data, and in particular stores one or more modules 110. Data storage memory 191 stores the data sets representative of the schedules S including advertised time, bookings (unavailable time) and any union data generated by the one or more modules of the present invention to be reused.
It is to be appreciated that the computer system 80 can be any computer such as a personal computer, minicomputer, workstation, mainframe, a dedicated controller such as a programmable logic controller, or a combination thereof. While the computer system 80 is shown, for illustration purposes, as a single computer unit, the system can comprise a group/farm of computers which can be scaled depending on the processing load and database size. In certain embodiments, the system and method herein can be operate on a user's computer, for instance, in a user's browser, querying among schedule data that resides on the user's machine, after having been downloaded without query from a networked server computer. However, not all of these components may be required to practice the invention, and variations in the arrangement and type of the components may be made without departing from the spirit or scope of the invention. In some embodiments, the inventive system and method may include a large number of users and/or concurrent transactions. In other embodiments, the instant inventive systems are based on a scalable computer and network architecture that incorporates various strategies for assessing the data, caching, searching, and database connection pooling. An example of the scalable architecture is an architecture that is capable of operating multiple servers that are in real-time communicating with numerous electronic devices of users (e.g., smartphones). In some embodiment, the inventive systems of present invention can host a large number of electronic devices of users (e.g., at least 100; at least 1,000, at least 10,000; at least 100,000; at least 1,000,000; at least 1,000,000,000, etc.) and/or perform a large number of concurrent actions/transactions (e.g., at least 1,000; at least 10,000; at least 100,000; at least 1,000,000, at least 1,000,000,000, etc.) with a numerous data Schedule S and TimeWindows sets (e.g., at least 1,000; at least 10,000; at least 100,000; at least 1,000,000, at least 1,000,000,000, etc.).
The computing device 80 preferably supports an operating system, for example stored in program storage memory 111 and executed by the processor 82 from volatile memory. According to an embodiment of the invention, the operating system contains instructions for interfacing the device 80 to the scheduling modules.
In various alternate embodiments, the present invention may be implemented as a computer program product for use with a computerized computing system. Those skilled in the art will readily appreciate that programs defining the functions defined by the present invention can be written in any appropriate programming language and delivered to a computer in many forms, including but not limited to: (a) information permanently stored on non-writeable storage media (e.g., read-only memory devices such as ROMs or CD-ROM disks); (b) information alterably stored on writeable storage media (e.g., floppy disks and hard drives); and/or (c) information conveyed to a computer through communication media, such as a local area network, a telephone network, or a public network such as the Internet. When carrying computer readable instructions that implement the present invention methods, such computer readable media represent alternate embodiments of the present invention.
For purposes of the instant description, the terms âcloud,â âInternet cloud,â âcloud computing,â âcloud architecture,â and similar terms correspond to at least one of the following: (1) a large number of computers connected through a real-time communication network (e.g., Internet); (2) providing the ability to run a program or application on many connected computers (e.g., physical machines, virtual machines (VMs)) at the same time; (3) network-based services, which appear to be provided by real server hardware, and are in fact served up by virtual hardware (e.g., virtual servers), simulated by software running on one or more real machines (e.g., allowing to be moved around and scaled up (or down) on the fly without affecting the end user). In some embodiments, the present invention offers/manages the cloud computing/architecture as, but not limiting to: infrastructure a service (IaaS), platform as a service (PaaS), and software as a service (SaaS).
Illustrative exemplary programming code utilized in programming the exemplary specifically programmed computer-implemented engine of the present invention to book an available time slot is provided below.
| ## The Book method |
| ### |
| â# Attempts to book a specific time slot, âobjectâ is the Service being booked. |
| âdef book!(params= { }) |
| # finds all available schedules for search params... | |
| schedules = object.available_schedules_near(params) | |
| # thereâs a problem if requested duration is less than Service duration... | |
| params[:duration] ||= object.duration | |
| raise Exceptions::InvalidParams.new(â422 Requested :duration |
| #{params[:duration]} is less than Service duration #{object.duration}â) unless params[:duration] |
| >= object.duration |
| booking = nil | |
| # iterate through available schedules... | |
| schedules.each do |schedule| |
| gb_transaction do | |
| âschedule.lock! # with lock.... | |
| â# check if schedule is still available... | |
| âif schedule.has_availability_at?(params) |
| date = params[:date] | |
| tw = TimeWindow.factory!({ |
| ânegationâ => true, | |
| ârecurs_byâ => âonceâ, | |
| âfrequencyâ => âsingleâ, | |
| âstart_dateâ => date, | |
| âdaysâ => date.strftime(â%Aâ).downcase, | |
| âstart_timeâ => mil_to_mins(date.strftime(â%H%Mâ).to_i), | |
| âend_timeâ => mil_to_mins((date + |
| duration.minutes).strftime(â%H%Mâ).to_i), |
| âtotal_minutesâ => duration |
| âââ}.merge(params)) | |
| schedule.time_windows << tw | |
| # creates the booking... | |
| booking = Booking.create!(user_id: params[:booker_id], time_window_id: |
| tw.id) |
| # clear any cache of availabilities... | |
| schedule.clear_availability_cache(tw) |
| âend | |
| end | |
| break if booking # we only need to book for first available Schedule found... |
| end | |
| booking |
| âend |
| end |
| ### |
| ## book! calls Service.available_schedules_near to find availabilities |
| ### |
| ### |
| ## Service.available_schedules_near defers to Schedule.has_availability_near? |
| ### |
| ### |
| ## Schedule.has_availability_near? defers to Schedule.availabilities |
| ### |
| ### |
| ## Schedule.availabilities defers to Schedule.time_window_availabilities |
| ### |
| âdef time_window_availabilities(options={ }) |
| available = SortedSet.new | |
| if options[:date] |
| # select relevant TimeWindows if specific date in daygroup, then collect |
| possible day availabilities. |
| available_time_windows.select{|tw| |
| tw.in_daygroup?(options[:date])}.each{|tw| available += tw.events(options)} |
| elsif options[:start_dt] and options[:end_dt] |
| # if dealing with a range, test each day in range | |
| date = options[:start_dt] | |
| while date < options[:end_dt] | |
| âavailable_time_windows.select{|tw| tw.in_daygroup?(date)}.each{|tw| |
| available += tw.events(options)} |
| âdate += 1.day | |
| end |
| else |
| # no specific date to match daygroups against... | |
| available_time_windows.each{|tw| available += tw.events(options)} |
| end | |
| available |
| âend |
| ### |
| ## TimeWindow.in_daygroup?. date.wday is the weekday of date. |
| ### |
| âdef in_daygroup?(date) |
| daygroup & (2**date.wday) > 0 ## <== the & is Ruby syntax for a bitwise |
| intersection |
| âend |
| ### |
| ## TimeWindow.daygroup |
| ## daygroup - set of active (boolean) day of week fields expressed as a bitwise |
| sum of 2{circumflex over (â)}(day of week) with :sunday => 0 as per Ruby/Rails convention |
| ## e.g. daygroup(:sunday=>true) implies integer value == 1 |
| ## | daygroup(:monday=>true) implies integer value == 2 |
| ## | daygroup(:saturday=>true) implies integer value == 64 |
| ## | daygroup(:sunday=>true, :monday=>true, :tuesday=>true, |
| :wednesday=>true, :thursday=>true, :friday=>true, :saturday=>true) implies integer value == |
| 127 |
| ### |
| # return the integer bitwise addition of the days of week as powers of 2 (see |
| comment in header) |
| def daygroup |
| dg_bit = 0 | |
| # we rotate once from the end to start with Sunday, instead of monday as |
| Time::DAYS_INTO_WEEK does |
| Time::DAYS_INTO_WEEK.keys.rotate(â1).each_with_index{ |day, index| |
| dg_bit |= 1 << index if self.send(â#{day}?â.to_sym)} |
| dg_bit |
| End | |
Illustrative example of Application Program Interface code (API) having exemplary rules utilized in programming and operation of the exemplary specifically programmed computer-implemented engine of the present invention to book available time slots In some embodiments, the API is configured/programmed to allow to manage Users and their Resources, such as:
the Services/Activities the Users and/or their Resources offer
the Schedules of Services/Activities
the Booking of a Service at a particular time
Users can Search for any available scheduled Services/Activities
Basic Users
In some embodiments, a Basic User cannot create any Resources, the only Resource they have is themselves. In some embodiments, a Basic User can create Services/Activities but they must be offered at no charge. In some embodiments, Basic User accounts are free for the first year, and $1 per year after the first year.
Pro Users
In some embodiments, any Basic account can be upgraded to a Pro account. In some embodiments, Pro Users are able to create additional Resources under their account. These Resources can have their own Schedules as well as Services/Activities offered. Pro Users are also able to offer Services/Activities at a price to the customer. The price of a Service/Activity can be fixed for the duration of the appointment, hourly, or various other options.
Access to the API
In some embodiments, Pro Users automatically gain access to the API. The API allows for the creation and management of the Pro User's Resources, Services/Activities, Schedules and Bookings.
Account Manager
The API allows creation of other accounts for which the Pro User becomes the defacto Account Manager. The Pro User, via API, can then create and manage Resources, Services/Activities, and Schedules of Users for which they are the Account Manager. Account Managers have only limited access to manage the Bookings of their managed Users. In some embodiments, any Users created via API are completely viewable and have their Services and Schedules.
Entities (Programmed Objects) (FIG. 6)
There are several Entities in the system accessible via API:
Users
Services/Activities
PricingModels
Schedules
Resources
Categories
Search Results
Bookings
Getting started using the API to make a User with Services that are advertised can be done, for example, in as few as 5 steps. Use this walk-through to get up and running:
Step 1âObtain Your Key
Step 2âCreate a User
Step 3âCreate a Service
Step 3.1â(Optional) Create a Category and associate with Service
Step 3.2â(Optional) Associate a Price Model with Service
Step 4âCreate a Schedule for the new Service
Step 5âCheck your work!
Step 1âObtain an API Key
In some embodiments, to obtain an API Key, you must be registered as a GoneBusy User. You must upgrade from a Basic to a Pro account. Once upgraded you can request an API Key from the Pro settings page. After agreeing to the Terms & Conditions of API access and usage, you will be issued an API Key. Keep this Key private. If you lose the Key, or feel it has been compromised, you can request another Key, which will make any previous keys invalid. The API Key value is passed as a parameter to all API requests, using the parameter name âapi_keyâ.
Step 2âCreate a User
Once registered, your own User account has been created for you. As a Pro User, you can now make changes via API to your own User account as well as create/update other User accounts. For any User accounts that you create via API, you are the Account Manager for those User accounts. Likewise, any User account created via API could also (after upgrading to a Pro account) obtain their own API Key and manage their own account as well as any additional User accounts that they create via the API.
| Request: | |
| Here is a sample POST request to create a new User: | |
| with POST body: |
| âłemailâł: âłtutor@youremail.comâł, | |
| âłfirst_nameâł: âłPrivateâł, | |
| âłlast_nameâł: âłTutorâł, | |
| âłbusiness_nameâł: âłTutors-R-Usâł, | |
| âłexternal_urlâł: âłtutors-r-us.sample.bizâł, | |
| âłtimezoneâł: âłESTâł, | |
| âłapi_keyâł: âłac98ed08b5b0a9e7c43a233aeba841ceâł |
| Response: | |
| Here is the response to the request, note the ID of our new User: | |
| âStatusâ: â201 Createdâ |
| { | |
| ââłuserâł: { |
| âłidâł: 54, | |
| âłemailâł: âłtutor@youremail.comâł, | |
| âłfirst_nameâł: âPrivateâ, | |
| âłlast_nameâł: âTutorâ, | |
| âłdisabledâł: false, | |
| âłbusiness_nameâł: âłTutors-R-Usâł, | |
| âłexternal_urlâł: âłtutors-r-us.sample.bizâł, | |
| âłpermalinkâł: null, | |
| âłtimezoneâł: âESTâ, | |
| âłcreated_atâł: âł2014-10-04T19:46:26Zâł, | |
| âłupdated_atâł: âł2014-10-04T19:46:26Zâł, | |
| âłresource_idâł: 267, | |
| âłaccount_manager_idâł: 22, | |
| âładdressâł: null |
| â} | |
| } | |
Step 3âCreate a Service/Activity
A sample POST request to create a Service for our sample User:
| Request: |
| with POST body: |
| âłuser_idâł: 54, | |
| âłnameâł: âłLSAT/MCAT Tutoringâł, | |
| âłdescriptionâł: âłTutoring for LSAT or MCAT exams. Available |
| by the hour.âł, |
| âłdurationâł: 60, | |
| âłapi_keyâł: âłac98ed08b5b0a9e7c43a233aeba841ceâł |
| Response: |
| âStatusâ: â201 Createdâ |
| { | |
| ââłserviceâł: { |
| âłidâł: 4183, | |
| âłowner_idâł: 54, | |
| âłresourcesâł: [267], | |
| âłnameâł: âłLSAT/MCAT Tutoringâł, | |
| âłshort_nameâł: null, | |
| âłdurationâł: 60, | |
| âłdescriptionâł: âłTutoring for LSAT or MCAT exams. Available |
| by the hour.âł, |
| âłprice_model_idâł: null, | |
| âłis_activeâł: true, | |
| âłcategoriesâł: â[ ]â |
| â} | |
| } | |
Step 3.1âCreate a Category and Associate with a Service/Activity
The Service/Activity created in Step 3 above was not Associated with any Categories during creation. We could have searched for Categories that already exist in the system and then specified the IDs of Categories at the time of Service/Activity creation. We can also make our own Category as follows.
Here is a sample POST request to create a Category:
| Request: |
| with POST body: |
| âłnameâł: âłGraduate School Exam Preparationâł, | |
| âłdescriptionâł: âłServices related to preparing for graduate-level |
| entrance exams such as LSAT, MCAT, etc.âł, |
| âłapi_keyâł: âłac98ed08b5b0a9e7c43a233aeba841ceâł |
| Response: |
| âStatusâ: â201 Createdâ |
| { | |
| ââłcategoryâł: { |
| âłidâł: 23, | |
| âłnameâł: âłGraduate School Exam Preparationâł, | |
| âłshort_nameâł: null, | |
| âłlong_nameâł: null, | |
| âłdescriptionâł: âłService related to preparing for graduate-level |
| entrance exams such as LSAT, MCAT, etc.âł, |
| âłparent_category_idâł: null, | |
| âłis_activeâł: true, | |
| âłsubcategoriesâł: [ ] |
| â} | |
| } | |
In some embodiments, we can now assign our recently created Service to this Category. You can assign multiple Categories at once with a comma-delimited list of Category IDs, or just provide a single Category ID.
| Request: |
| with PUT body: |
| âłcategoriesâł: â[ 23 ]â, | |
| âłapi_keyâł: âłac98ed08b5b0a9e7c43a233aeba841ceâł |
| Response: |
| âStatusâ: â200 OKâ |
| { | |
| ââłserviceâł: { |
| âłidâł: 4183, | |
| âłowner_idâł: 54, | |
| âłresourcesâł: [ 267 ], | |
| âłnameâł: âłLSAT/MCAT Tutoringâł, | |
| âłshort_nameâł: null, | |
| âłdurationâł: 60, | |
| âłdescriptionâł: âłTutoring for LSAT or MCAT exams. Available |
| by the hour.âł, |
| âłprice_model_idâł: null, | |
| âłis_activeâł: true, | |
| âłcategoriesâł: [ | |
| â{ |
| âłidâł: 23, | |
| âłnameâł: âłGraduate School Exam Preparationâł, | |
| âłshort_nameâł: null, | |
| âłlong_nameâł: null, | |
| âłdescriptionâł: âłService related to preparing for |
| graduate-level entrance exams such as LSAT, MCAT, etc.âł, |
| âłparent_category_idâł: null, | |
| âłis_activeâł: null, | |
| âłsubcategoriesâł: [ ] |
| â} | |
| ] |
| â} | |
| } | |
Step 3.2â(Optional) Associate a PricingModel with a Service
he Service created in Step 3 above was not Associated with a PricingModel during creation. Recall that a Service defaults to having âActivityâ pricing if no PricingModel is specified, which means it must be offered at no charge. If we want to charge for our new Service, let's create an appropriate PricingModel and associate it with our Service.
Here is a sample POST request to create a PricingModel:
| Request: | |
| with POST body: |
| âłtypeâł: âByTheHourâ, | |
| âłpriceâł: 50.0, | |
| âłnameâł: âłTutoring Hourly Rateâł, | |
| âłnotesâł: âłApplies to LSAT, MCAT, SAT as wellâł, | |
| âłapi_keyâł: âłac98ed08b5b0a9e7c43a233aeba841ceâł |
| Response: | |
| âStatusâ: â201 Createdâ |
| { | |
| ââłpricing_modelâł: { |
| âłidâł: 126, | |
| âłnameâł: âłTutoring Hourly Rateâł, | |
| âłpriceâł: 50.00, | |
| âłcurrencyâł: âUSDâ, | |
| âłnotesâł: âłApplies to LSAT, MCAT, SAT as wellâł, | |
| âpricing_model_typeâ: âByTheHourâ |
| â} | |
| } | |
We can now assign our recently created Service to this PricingModel using the ID of the PricingModel we just created:
| Request: |
| with PUT body: |
| âłprice_model_idâł: 126, | |
| âłapi_keyâł: âłac98ed08b5b0a9e7c43a233aeba841ceâł |
| Response: |
| âStatusâ: â200 OKâ |
| { | |
| ââłserviceâł: { |
| âłidâł: 4183, | |
| âłowner_idâł: 54, | |
| âłresourcesâł: [ 267 ], | |
| âłnameâł: âłLSAT/MCAT Tutoringâł, | |
| âłshort_nameâł: null, | |
| âłdurationâł: 60, | |
| âłdescriptionâł: âłTutoring for LSAT or MCAT exams. Available |
| by the hour.âł, |
| âłprice_model_idâł: 126, | |
| âłis_activeâł: true, | |
| âłcategoriesâł: [ | |
| â{ |
| âłidâł: 23, | |
| âłnameâł: âłGraduate School Exam Preparationâł, | |
| âłshort_nameâł: null, | |
| âłlong_nameâł: null, | |
| âłdescriptionâł: âłService related to preparing for |
| graduate-level entrance exams such as LSAT, MCAT, etc.âł, |
| âłparent_category_idâł: null, | |
| âłis_activeâł: null, | |
| âłsubcategoriesâł: [ ] |
| â} | |
| ] |
| â} | |
| } | |
Step 4âCreate a Schedule for the New Service
Now that a new User and Service have been created, we need to create a Schedule that specifies when the Service will be offered by the new User. In some embodiments, without an explicit resource_id passed, the default resource of our new User will be assigned the new Schedule. Let's create the following Schedule for our âLSAT/MCAT Tutoringâ Service: âStarting November 1st until January 31st, available every Monday, Wednesday, Friday from 4 pm to 11 pm.â A Schedule is made up of many TimeWindows but for convenience it is encouraged to create a Schedule by passing parameters that will also create the first TimeWindow in addition to the new Schedule. The following POST to create a Schedule will also create a TimeWindow that corresponds to the above availability:
| Request: | |
| with POST body: |
| âłservice_idâł: 4183, | |
| âłuser_idâł: 54, | |
| âłstart_dateâł: âł2014-11-01â, | |
| âłend_dateâł: âł2015-01-31â, | |
| âłstart_timeâł: âł4pmâ, | |
| âłend_timeâł: âł11pmâ, | |
| âłrecurs_byâł: âłweeklyâ, | |
| âłdaysâł: [âłmondayâ, âłwednesdayâ, âłfridayâ], | |
| âłapi_keyâł: âłac98ed08b5b0a9e7c43a233aeba841ceâł |
| Response: | |
| âStatusâ: â201 Createdâ |
| { | |
| ââłscheduleâł: { |
| âłidâł: 8090, | |
| âłservice_idâł: 4183, | |
| âłresource_idâł: 267, | |
| âłtime_windowsâł: [ | |
| â{ |
| âłidâł: 10536, | |
| âłstart_dateâł: âł2014-11-01â, | |
| âłend_dateâł: âł2015-01-31â, | |
| âłstart_timeâł: âł4pmâ, | |
| âłend_timeâł: âł11pmâ, | |
| âłtotal_minutesâł: 420, | |
| âłrecurs_byâł: âłweeklyâ, | |
| âłdaysâł: [âłmondayâ, âłwednesdayâ, âłfridayâ], | |
| âłfrequencyâł: âłeveryâ, | |
| âłoccurrenceâł: âłeveryâ, | |
| âłdate_recurs_byâł: null, | |
| âłnegationâł: false |
| â} | |
| ] |
| â} | |
| } | |
Step 5âCheck Your work
Now that our Schedule has been created for our âLSAT/MCAT Tutoringâ Service, lets check what our available bookable time slots are on November 3rd:
| Request |
| GET |
| http://beta.gonebusy.com/api/v1/services/4183/available_slots.json?date=11-03-2014 |
| Response: |
| âStatusâ: â200 OKâ |
| { |
| ââłserviceâł: { |
| âłidâł: 4183, | |
| âłowner_idâł: 54, | |
| âłresourcesâł: [ | |
| â{ |
| âidâł: 267, | |
| âłavailable_slotsâł: [ | |
| â{ |
| âłdateâł: âł2014-11-03âł, | |
| âłslotsâł: [ âł04:00:00 PMâł, âł04:15:00 PMâł, âł04:30:00 PMâł, âł04:45:00 PMâł, |
| âł05:00:00 PMâł, âł05:15:00 PMâł, âł05:30:00 PMâł, âł05:45:00 PMâł, âł06:00:00 PMâł, âł06:15:00 |
| PMâł, âł06:30:00 PMâł, âł06:45:00 PMâł, âł07:00:00 PMâł, âł07:15:00 PMâł, âł07:30:00 PMâł, |
| âł07:45:00 PMâł, âł08:00:00 PMâł, âł08:15:00 PMâł, âł08:30:00 PMâł, âł08:45:00 PMâł, âł09:00:00 |
| PMâł, âł09:15:00 PMâł, âł09:30:00 PMâł, âł09:45:00 PMâł, âł10:00:00 PMâł ] |
| â} | |
| ] |
| â} | |
| ] |
| â} |
| } |
Exemplary Entities
Users
Users are the people that participate on GoneBusy. If you haven't done so already, take a look at our explanation of how Users interact with GoneBusy on the âHow GoneBusy Worksâ page. In some embodiments, the API allows a Pro User to manage themselves or an Account Manager to operate on managed users in order to offer services, schedule availability, and various other operations.
Services/Activities
In some embodiments, Bookings would not be possible without users offering their Services/Activities. Services can be anything that someone, or a group of professionals at a business, offers for a fee that requires a time commitment. Activities also require a time commitment but don't require charging a feeâfor instance, Activities are things one shares with friends.
PricingModels
Each Service a User offers must have a PricingModel associated with it in order to specify how to charge for the Service. There are several types of PricingModels, including âActivityâ which means the Service is actually an Activity that has no charge Associated with it. When a Service is created without specifying a PricingModel, by default it will have an Activity PricingModel Associated with it. To create a new PricingModel, one must specify the type of PricingModel (see below) along with any additional attributes the specific PricingModel requires.
There are several types of PricingModels that can be assigned to a Service. If you have a need to price a Service/Activity in a manner that is not accommodated by any of the PricingModels below, please let us know and we'll be happy to assist you with creating a new PricingModel if necessary. In some embodiments, PricingModels can be of the following types:
1) Activityâwhen a Service is free of charge, such as an Activity you only share with friends, you can specify the Activity type when creating a PricingModel for the Service.
Attributes:
name (optional)âan optional name for the PricingModel
notes (optional)âan optional notes field for the PricingModel
2) FixedPriceâif the price of a Service is constant, no matter the duration a customer can reserve for, specify the FixedPrice type when creating a PricingModel for the Service. An example of such a Service would be a âMan with a Vanâ that charges for the entire day of work no matter whether the customer requested 2 hours or 8 hours of time on any given day.
Attributes
price (required)âprice that will be charged for the entire Service
currency (optional)âcurrency of price. Defaults to USD
name (optional)âan optional name for the PricingModel
notes (optional)âan optional notes field for the PricingModel
3) ByTheHourâwhen Services are charged for each hour being reserved, specify the ByTheHour type when creating a PricingModel for the Service. There are many examples of businesses that offer Services or classes by the hour, such as salons, yoga studios, guitar lessons, etc.
Attributes
price (required)âprice that will be charged for each hour reserved
currency (optional)âcurrency of price. Defaults to USD
name (optional)âan optional name for the PricingModel
notes (optional)âan optional notes field for the PricingModel
4) ByTheMinuteâwhen Services are charged for each minute being reserved, specify the ByTheMinute type when creating a PricingModel for the Service. Examples of Services that may charge by the minute may include tutoring, a help line, etc.
Attributes
price (required)âprice that will be charged for each minute reserved
currency (optional)âcurrency of price; defaults to USD
description (optional)âan optional description for the PricingModel
Resources
Resources are what actually provide Services/Activities. By default, a Basic User is a Resource for their own Services/Activities (recall that a Basic User can only offer free Activities while a Pro User can charge a fee for their Services). Pro Users are able to create additional Resources for Services, besides just offering Services themselves. The following types of Resources may be created:
1) Personâa User can create another Person Resource, such as another instructor at a gym, or a therapist at a spa.
Attributes
first_nameâperson's first name
last_nameâperson's last name
2) Placeâa Place Resource would apply to something like a classroom, which hosts a particular Service at a time, or maybe a meeting room online where tutoring is offered.
Attributes
nameâthe name of this Place
capacityâan optional limit to how many Bookings are allowed at a single time for this Place
3) Thingâa Thing Resource would apply to something like a van or equipment which is offered for rent for a certain amount of time.
Attributes
nameâthe name of this Thing
4) Schedules
Schedules: they start on a date, may end on a date, or possibly repeat indefinitely; falling between certain hours on particular days of the week. By defining a Schedule for a Service that is offered by a Resource, it is possible to advertise the available times the Service may be booked. In some embodiments, a Schedule is made up of a single or many TimeWindows, where the most important attributes of a TimeWindow are the following:
start_dateâwhat date it begins on;
end_date_what date it ends on (if any); no end_date means this scheduled window of time is valid forever;
daysâthe days of the week it falls on, such as Sunday through Saturday, everyday, weekends, etc.;
start_timeâthe earliest appointment time for the service;
end_timeâwhen the last appointment must be finished by.
Types of Recurring TimeWindows
In some cases, a period of advanced time will continue be offered in a recurring fashion, such as:
dailyâspecify this kind of recurrence if a Service is offered every single day at the same time (this makes specifying days unnecessary).
weeklyâsomething that recurs every week, such as a class
monthlyâsomething that recurs every month (it is possible to specify that something recurs only the first week of each month as well)
yearlyâthis is useful for Services that happen on some date or stretch of days every year
Frequency
Frequency is a kind of multiplier for how the TimeWindow recurs. For example, a monthly TimeWindow with days=âweekendâ and frequency=âevery_otherâ and interval=âeveryâ implies that we are interested in a TimeWindow that actually recurs âevery weekend every other monthâ.
Occurrence
Interval tells us exactly which instance of a TimeWindow's recurrence we are interested in. For example, a monthly TimeWindow with days=âweekendâ and frequency=âevery_otherâ and interval=â2nd_to_lastâ implies that we are interested in a TimeWindow that actually recurs âevery 2nd to last weekend every other monthâ.
5) Categories
Categories are a way of organizing or tagging available Services/Activities.
6) Search Results
A specifically programmed Search graphical user interface for retrieving Services/Activities that meet search criteria such as Category name, geographic distance, rating, price, etc.
7) Bookings
In some embodiments, a Booking represents the commitment by one user to attend a Service/Activity of another user at a particular time. The API allows the creation and management of Bookings.
GET/Bookings
This will look up all uncompleted Bookings that your account has access toâthis includes all Bookings under your own User account as well as any Bookings of Users for which you are the Account Manager.
Optional Parameters:
user_idâprovide a User ID to see only this User's Bookings
statesâprovide a comma-separated list of Booking states in order to only retrieve Bookings in those states. Leave blank to retrieve all possible states.
pageâresult page of interest, default: 1
per_pageânumber of results per page, default: 10.
GET/bookings/{id}
Look up details for a Booking by ID. You can access details for any Service under your own User account as well as any Bookings of Users for which you are the Account Manager.
Required Parameters:
idâid of booking to retrieve.
POST/bookings/new
Create a new Booking. Your own User account will by default be recorded as the initiator of the booking. Optionally, provide a user_id for a User you are the Account Manager of in order to create a booking.
Required Parameters:
service_idâthe ID of the Service that is to be booked
dateâprovide the date of the requested Booking. Several formats are supported: âOctober 31, 2014â, â10/31/2014â, â2014-10-31â
timeâprovide the time of the requested Booking. Several formats are supported: â9 amâ, â09:00â, â9:00â, â0900â
Optional Parameters:
resource_idâthe ID of a Resource to be booked. If not provided, the first available Resource will be booked.
durationâif the service allows requesting a variable amount of time, specify how many minutes are desired
user_idâID of a User you are the Account Manager of for whom you would like to initiate a booking.
PUT/bookings/{id}
Update information for a Booking. The ID must be of a Booking that is under your User account or any User for which you are the Account Manager. You can not update appointment time information for a Booking once placed. This action is a placeholder for future update-able information.
DELETE/bookings/{id}
Attempt to cancel a Booking by ID. The ID must be of a Booking that is under your User account or any User for which you are the Account Manager. If cancellation is not possible, this will return an error message.
Required Parameters:
idâid of booking to cancel
Categories
GET/categories
This will look up all Categories in the system. If retrieving Categories for a particular User, you must be authorized to manage this User.
Optional Parameters:
user_idâprovide a User ID to see only the Categories of Services offered by a particular User
pageâresult page of interest, default: 1
per_pageânumber of results per page, default: 10
GET/categories/{id}
Look up details for a Category by ID. You can access details for any Category.
Required Parameters:
idâid of category to retrieve
POST/categories/new
Create a new Category. Please note that once created, it can not be modified. A duplicate named Category under the same Parent Category ID is not permitted.
Required Parameters:
nameâname of new Category
descriptionâdescription for Category
Optional Parameters:
short_nameâabbreviated name for Category
long_nameâfull name of Category
parent_category_idâid of parent Category
PricingModels
GET/pricing_models
This will look up all PricingModels in the system.
Optional Parameters:
user_idâprovide a User ID to see only this User's PricingModels
pageâresult page of interest, default: 1
per_pageânumber of results per page, default: 10
GET/pricing_models/{id}
Look up details for a PricingModel by ID. You can access details for any PricingModel under your own User account as well as any PricingModels of Users for which you are the Account Manager.
POST/pricing models/new
Create a new PricingModel. Your own User account will automatically become the Account Manager for any newly created PricingModels.
Required Parameters:
nameâname of Pricing Model being created
typeâtype of Pricing Model (must be a valid type, see Entities above)
Optional Parameters:
user_idâprovide a User ID of a managed User to create a Pricing Model for this User
priceâprice, if applicable
currencyâ3-letter ISO currency code
notesâadditional notes about Pricing Model
PUT/pricing_models/{id}
Update information for a PricingModel. The ID must be of a PricingModel that is under your User account or any User for which you are the Account Manager.
Optional Parameters:
nameânew name of Pricing Model
Resources
GET/resources
This will look up all Resources that your account has access toâby default this includes all Resources under your own User account as well as any Resources of Users for which you are the Account Manager. Provide user_id of a managed User to return only the Resources for that User.
Optional Parameters:
user_idâprovide a User ID to see only this User's Resources
pageâresult page of interest, default: 1
per_pageânumber of results per page, default: 10
GET/resources/{id}
Look up details for a Resource by ID. You can access details for any Resource under your own User account as well as any Resources of Users for which you are the Account Manager.
POST/resources/new
Create a new Resource. By default your own User account will automatically become the Account Manager for any newly created Resources.
Required Parameters:
nameâname of Pricing Model being created
typeâtype of Pricing Model, must be a valid type, see Entities above.
Optional Parameters:
user_idâprovide a User ID of a managed User to create a resource for this user
genderâgender of Resource, if applicable
capacityâcapacity of Resource, if applicable
descriptionâdescription of Resource
PUT/resources/{id}
Update information for a Resource. The ID must be of a Resource that is under your User account or any User for which you are the Account Manager. You can not update Resources that were previously deleted.
Optional Parameters:
nameânew name of Resource
DELETE/resources/{id}
Delete a Resource by ID. The ID must be of a Resource that is under your User account or any User for which you are the Account Manager. Deletion is a multi-step process: first the Resource is marked inactive and no longer appears in Search results; if no Bookings exist for this Resource then it is completely destroyed, otherwise it is kept archived for historical purposes. You cannot delete Resources that were previously deleted.
Schedules
GET/schedules
This will look up all Schedules that your account has access toâthis includes all Schedules under your own User account as well as any Schedules of Users for which you are the Account Manager.
Optional Parameters:
user_idâprovide a User ID to see only this User's Schedules for their Services
pageâresult page of interest, default: 1
per_pageânumber of results per page, default: 10
GET/schedules/{id}
Look up details for a Schedule by ID. You can access details for any Schedule under your own User account as well as any Schedules of Users for which you are the Account Manager.
POST/schedules/new
Create a new Schedule. A Schedule is created in the context of a Service that is provided by a Resource. Recall that a Basic User is automatically a Resource for their own Services. A Pro User has the ability to create additional Resources, in addition to their own, each one of which can provide their own set of Services with their own Schedules.
In some embodiments, to save an API call, one can pass parameters for the first TimeWindow as part of the Schedule creation (see POST params for TimeWindow). Although these parameters are described below in relation to the Schedule being created, they are used to create the first TimeWindow that will make up this Schedule.
While marked optional for Schedule creation, there is still validation performed to ensure that all necessary parameters for TimeWindow creation have been properly supplied if any are provided.
Required Parameters:
service_idâprovide the Service ID that is being scheduled
Optional Parameters:
user_idâprovide a User ID to create a Schedule for this User. You must be authorized to manage this User and User must own desired Service and Resource.
resource_idâprovide the Resource ID that is being scheduled. If not provided and userâid is not present, the default Resource of the API user is assumed to be the Resource being scheduled. If not provided and user_id is present, the default Resource of the User is assumed to be the Resource being Scheduled.
start_dateâstart date of the TimeWindow. Several formats are supported: âOctober 31, 2014â, â10/31/2014â, â2014-10-31â
end_dateâend date of the TimeWindow. Several formats are supported: âOctober 31, 2014â, â10/31/2014â, â2014-10-31â. If no end_date is specified this TimeWindow is deemed âinfiniteâ.
start_timeâstart time of the TimeWindow. Several formats are supported: â9 amâ, â09:00â, â9:00â, â0900â
end_timeâend time of the TimeWindow. Several formats are supported: â5 pmâ, â17:00â, â1700â
total_minutesâonly necessary if the length of the Service cannot be deduced from end_time minus start_time. An example would be a Service that actually lasts 36 hours from 10 am to 10 pm the next day. This must be specified in number of minutes, eg. 2160=36 hours.
daysâa String list of comma-separated days of the week this window of time falls on: âsunday, monday, tuesday, wednesday, thursday, friday, saturdayâ. At least one must be specified. The order supplied does not matter.
recurs_byâone and only one of the following possible values: [once, daily, weekly, monthly, yearly].
frequencyâone of the following possible values: [single, every, every_other, every_3rd, every_4th, . . . , every_(Nth)] where Nth max is â100thâ. If nothing is specified, the default value is âeveryâ.
occurrenceâone of the following possible values: [every, 1st, 2nd, 3rd, . . . , (Nth), last, 2nd_to_last, 3rd_to_last, . . . , (Mth)_to last] where Nth max is â366thâ and Mth max is â10thâ. If nothing is specified, the default value is âeveryâ.
date_recurs_byâthis field is optional except when ârecurs_byâ is one of âmonthlyâ or âyearlyâ. For those two types of TimeWindows this field must be one of [date_in_month, day_in_month] for âmonthlyâ and [date_in_year, day_in_year] for âyearlyâ, respectively. âday_in_monthâ specifies that we're interested in the day that is represented by the date in the month, for example, the â2nd Tuesdayâ of the month. âday_in_yearâ specifies that we're interested in the day that is represented by the date in the year, for example, the â182ndâ day of the year.
POST/schedules/{id}/time_windows/new
Create a TimeWindow for Schedule specified by Schedule ID. The Schedule ID must be of a Schedule that is under your User account or any User for which you are the Account Manager.
Required Parameters:
idâid of Schedule being modified
start_dateâstart date of the TimeWindow. Variousl formats can be supported: âOctober 31, 2014â, â10/31/2014â, â2014-10-31â
start_timeâstart time of the TimeWindow. Various formats can be supported: â9 amâ, â09:00â, â9:00â, â0900â
end_timeâend time of the TimeWindow. Various formats can be supported: â5 pmâ, â17:00â, â17:00â, â1700â
daysâa String list of comma-separated days of the week this window of time falls on: âsunday, monday, tuesday, wednesday, thursday, friday, saturdayâ. At least one must be specified. In some embodiments, the order supplied does not matter.
recurs_byâone and only one of the following possible values: [once, daily, weekly, monthly, yearly].
Optional Parameters:
end_dateâend date of the TimeWindow. Several formats are supported: âOctober 31, 2014â, â10/31/2014â, â2014-10-31â. If no end_date is specified this TimeWindow is deemed âinfiniteâ.
total_minutesâonly necessary if the length of the Service cannot be deduced from end_time minus start_time. An example would be a Service that actually lasts 36 hours from 10 am to 10 pm the next day. This must be specified in number of minutes, eg. 2160=36 hours.
frequencyâone of the following possible values: [single, every, every_other, every_3rd, every_4th, . . ., every (Nth)] where Nth max is â100thâ. If nothing is specified, the default value is âeveryâ.
occurrenceâone of the following possible values: [every, 1st, 2nd, 3rd, . . . , (Nth), last, 2nd_to_last, 3rd_to_last, . . . , (Mth) to last ] where Nth max is â366thâ and Mth max is â10thâ. If nothing is specified, the default value is âeveryâ.
date_recurs_byâthis field is optional except when ârecurs_byâ is one of âmonthlyâ or âyearlyâ. For those two types of TimeWindows this field must be one of [date_in_month, day_in_month] for âmonthlyâ and [date_in_year, day_in_year] for âyearlyâ, respectively. âdate_in_XXâ specifies that the actual date is required. âday_in_monthâ specifies that we're interested in the day that is represented by the date in the month, for example, the â2nd Tuesdayâ of the month. âday_in_yearâ specifies that we're interested in the day that is represented by the date in the year, for example, the â182ndâ day of the year.
PUT/schedules/{id}/time_windows/{time_window_id}
Update information for a TimeWindow of a Schedule. The Schedule ID must be of a Schedule that is under your User account or any User for which you are the Account Manager.
Required Parameters:
idâid of Schedule being modified
time_window_idâid of TimeWindow being modified
Optional Parameters:
start_dateâstart date of the TimeWindow. Several formats are supported: âOctober 31, 2014â, â10/31/2014â, â10-31-2014â
end_dateâend date of the TimeWindow. Several formats are supported: âOctober 31, 2014â, â10/31/2014â, â10-31-2014â. If no end_date is specified this TimeWindow is deemed âinfiniteâ.
start_timeâstart time of the TimeWindow. Several formats are supported: â9 amâ, â09:00â, â9:00â, â0900â
end_timeâend time of the TimeWindow. Several formats are supported: â5 pmâ, â17:00â, â17:00â, â1700â
daysâa String list of comma-separated days of the week this window of time falls on: âsunday, monday, tuesday, wednesday, thursday, friday, saturdayâ. At least one must be specified. The order supplied does not matter.
recurs_byâone and only one of the following possible values: [once, daily, weekly, monthly, yearly].
total_minutesâonly necessary if the length of the Service can not be deduced from end_time minus start_time. An example would be a Service that actually lasts 36 hours from 10 am to 10 pm the next day. This must be specified in number of minutes, eg. 2160=36 hours.
frequencyâone of the following possible values: [single, every, every_other, every_3rd, every_4th, . . . , every (Nth)] where Nth max is â100thâ. If nothing is specified, the default value is âeveryâ.
occurrenceâone of the following possible values: [every, 1st, 2nd, 3rd, . . . , (Nth), last, 2nd_to_last, 3rd_to_last, . . . , (Mth) to last ] where Nth max is â366thâ and Mth max is â10thâ. If nothing is specified, the default value is âeveryâ.
date_recurs_byâthis field is optional except when ârecurs_byâ is one of âmonthlyâ or âyearlyâ. For those two types of TimeWindows this field must be one of [date_in_month, day_in_month] for âmonthlyâ and [date_in_year, day_in_year] for âyearlyâ, respectively. âdate_in_XXâ specifies that the actual date is required. âday_in_monthâ specifies that we're interested in the day that is represented by the date in the month, for example, the â2nd Tuesdayâ of the month. âday_in_yearâ specifies that we're interested in the day that is represented by the date in the year, for example, the â182ndâ day of the year.
DELETE/schedules/{id}/time_windows/{time_window_id}
Delete a TimeWindow of a Schedule. The Schedule ID must be of a Schedule that is under your User account or any User for which you are the Account Manager.
Required Parameters:
idâid of Schedule being modified
time_window_idâid of TimeWindow being modified
DELETE/schedules/{id}
Delete a Schedule by ID. The ID must be of a Schedule that is under your User account or any User for which you are the Account Manager. Deletion is a multi-step process: first the Schedule is marked inactive and no longer appears in Search results; if no Bookings exist for this Schedule then it is completely destroyed, otherwise it is kept archived for historical purposes. You cannot delete Schedules that were previously deleted.
Required Parameters:
idâid of Schedule being modified
Search
GET/search/{query}
All Service/Activites that match given search criteria will be returned.
Required Parameters:
queryâsearch query
Optional Parameters:
pageâresult page of interest, default: 1
per_pageânumber of results per page, default: 10
Services
GET/services
This will look up all Services that your account has access toâthis includes all Services under your own User account as well as any Services of Users for which you are the Account Manager.
Optional Parameters:
user_idâprovide a User ID to see only this User's Services
pageâresult page of interest, default: 1
per_pageânumber of results per page, default: 10
GET/services/{id}
Look up details for a Service by ID. You can access details for any Service under your own User account as well as any Services of Users for which you are the Account Manager.
GET/services/{id}/available_slots
Look up available time slots for a Service by ID. You can query for a specific date or for a date range. The returned result set will group available slots by Resources that are offering the Service. You can access details for any Service under your own User account as well as any Services of Users for which you are the Account Manager.
Required Parameters:
idâID of desired Service
Optional Parameters:
dateâa specific date to check for availability. Either this field or a date range employing start_date and end_date must be supplied. If date is provided, start_date/end_date are ignored. Several formats are supported: â2014-10-31â, âOctober 31, 2014â.
start_dateâstart date of a date range to check for availability. If supplied, date must not be supplied and end_date must be supplied. Several formats are supported: â2014-10-31â, âOctober 31, 2014â.
end_dateâend date of a date range to check for availability. If supplied, date must not be supplied and start_ate must be supplied. Several formats are supported: â2014-10-31â, âOctober 31, 2014â.
POST/services/new
Create a new Service. Unless a user_id is provided, your own User account will automatically become the Account Manager for any newly created services.
Required Parameters:
nameâname of the Service
descriptionâa description for the Service
durationâminimum number of minutes required to perform this Service
Optional Parameters:
user_idâprovide a User ID to create a Service for this User. You must be authorized to manage this User.
short_nameâan abbreviated name for the Service, used where space is limited
price_model_idâID of a PricingModel for this service, that your account has permission to use
resourcesâa string of Resource IDs, comma-separated; if user_id is provided, all Resources must be owned by the User, defaults to User's Resource ID; if user_id is not provided, all Resources must be owned by API User; defaults to API User's Resource ID
categoriesâa string of Category IDs, comma-separated
PUT/services/{id}
Update information for a Service. The ID must be of a Service that is under your User account or any User for which you are the Account Manager. You can not update Services that were previously deleted.
Required Parameters:
idâID of desired Service to modify
Optional Parameters:
nameâname of the Service
descriptionâa description for the Service
durationâminimum number of minutes required to perform this Service
short_nameâan abbreviated name for the Service, used where space is limited
price_model_idâID of a PricingModel for this Service
resourcesâa string of Resource IDs, comma-separated; all resources must be owned by the same user; defaults to API User's Resource ID
categoriesâa string of Category IDs, comma-separated
DELETE/services/{id}
Delete a Service by ID. The ID must be of a Service that is under your User account or any User for which you are the Account Manager. Deletion is a multi-step process: first the Service is marked inactive and no longer appears in Search results; if no Bookings exist for this Service then it is completely destroyed, otherwise it is kept archived for historical purposes. You cannot delete Services that were previously deleted.
Users
GET/users
This will look up all Users that your account has access toâthis includes your own User account as well as any Users for which you are the Account Manager.
Optional Parameters:
pageâresult page of interest, default: 1
per_pageânumber of results per page, default: 10
GET/users/{id}
Look up details for a User by ID. You can access details for your own User account as well as any Users for which you are the Account Manager.
POST/users/new
Create a new User. Your own User account will automatically become the Account Manager for any newly created Users.
PUT/users/{id}
Update information for a User. The ID can be your own User account or the ID of any User of which you are the Account Manager. If the specified User has a password on file, changing the User's email address will invalidate the password and send a Reset Password email to the User.
PUT/users/{id}/register_pro
Upgrade a User by ID from a Basic to a Pro user.
GET/users/{id}/request_password
This will send a Reset Password email to the specified User's email address containing a link where they can reset their password. This will return all Users that are currently Pro Users, for which you are the Account Manager, including your own account.
GET/users/pros
This will return all Users that are currently Pro Users, for which you are the Account Manager, including your own account.
In some embodiments, the present invention provides for a computer-implemented method, including at least the steps of: electronically causing, via a computer network, by at least one specifically programmed computer processor of a schedule management computer system executing software to perform the method, to display a first specialized schedule graphical user interface (a first specialized schedule GUI) on a screen of each computing device associated with each user of a plurality of users; where the first specialized schedule GUI is configured to allow each user to: i) define at least one programmed schedule object, including a plurality of availability time periods (a plurality of TimeWindows), and ii) associate at least one programmed schedule object with at least one of: 1) at least one user, 2) at least one resource, and 3) at least one service; where each TimeWindow is: i) defined by a plurality of TimeWindow parameters, and ii) configured to identify whether a corresponding time period is available for booking or unavailable for booking; where the plurality of TimeWindow parameters include: i) at least one first TimeWindow parameter, identifying a start date for the corresponding time period, ii) at least one second TimeWindow parameter, identifying a start time for the corresponding time period, iii) at least one third TimeWindow parameter, identifying an end time for the corresponding time period, iv) at least one fourth TimeWindow parameter, identifying at least one day of a week associated with the corresponding time period, and v) at least one fifth TimeWindow parameter, identifying a period type of the corresponding time period; electronically and in real-time, generating, by the at least one specifically programmed computer processor, based, at least in part, on the at least one fourth TimeWindow parameter, a first bitmask of days in a week for the corresponding time period of each TimeWindow of the plurality of TimeWindows; electronically and in real-time, storing, by the at least one specifically programmed computer processor, a plurality of schedule objects associated with the plurality of users in at least one specifically dedicated database;
electronically causing, via the computer network, by the at least one specifically programmed computer processor, to display a second specialized schedule graphical user interface (a second specialized schedule GUI) on a screen of a computing device associated with a particular user, where the second specialized schedule GUI is configured to allow each user to submit an electronic query seeking to determine when a particular time period associated with at least one user is available for booking or unavailable for booking; electronically receiving, via the computer network, by the at least one specifically programmed computer processor, the electronic query of the particular user; electronically and in real-time, determining, by the at least one specifically programmed computer processor, based on the electronic query of the particular user, a set of TimeWindows selected from the plurality of schedule objects related to at least one of 1) the at least one user, 2) the at least one resource, and 3) the at least one service; electronically and in real-time, determining, by the at least one specifically programmed computer processor, based on the electronic query of the particular user, a set of TimeWindows selected from the plurality of schedule objects related to at least one of 1) the at least one user, 2) the at least one resource, and 3) the at least one service; electronically and in real-time, generating, by the at least one specifically programmed computer processor, a union structure of the set of TimeWindows; electronically and in real-time, determining, by the at least one specifically programmed computer processor, based on the first bitmask associated with each TimeWindow of the set of TimeWindows, a second bitmask corresponding to the at least one union; electronically and in real-time, determining, by the at least one specifically programmed computer processor, an intersection structure between the union and the electronic query of the particular user to identify at least one matched day of the week between the at least one union and the particular time period identified in the electronic query of the particular user; electronically and in real-time, determining, by the at least one specifically programmed computer processor, when the at least one matched day of the week includes the particular time period identified in the electronic query of the particular user, based, at least in part, on: 1) the at least one second TimeWindow parameter of a particular TimeWindow associated with the at least one matched day of the week; 2) the at least one third TimeWindow parameter of the particular TimeWindow associated with the at least one matched day of the week; 3) the at least one second TimeWindow parameter of the particular time period identified in the electronic query of the particular user; and 4) the at least one third TimeWindow parameter of the particular time period identified in the electronic query of the particular user; and electronically and in real-time, performing, by the at least one specifically programmed computer processor, one of: i) booking the particular time period for the particular user when the at least one matched day of the week includes the particular time period identified in the electronic query of the particular user; and ii) generating an indication identifying that the particular time period is unavailable for booking when the at least one matched day of the week excludes the particular time period identified in the electronic query of the particular user. In some embodiments, the exemplary method of the present invention further includes at least: electronically and in real-time, storing, by the at least one specifically programmed computer processor, the union structure and the intersection structure in the at least one specifically dedicated database. [000723] In some embodiments, the plurality of parameters further include at least one sixth parameter, identifying an end date for the corresponding time period. In some embodiments, the period type of the corresponding time period is selected from the group consisting of: once, daily, weekly, monthly, quarterly, and yearly. In some embodiments, the plurality of parameters further include at least one seventh parameter, identifying a particular date or a particular day which is within the corresponding time period having the period type of monthly or yearly. In some embodiments, the plurality of parameters further include at least one eighth parameter, identifying a frequency of the corresponding time period. In some embodiments, the plurality of parameters further include at least one ninth parameter, identifying an interval for the frequency of the corresponding time period. In some embodiments, the union structure is based on a logical OR operation with the set of TimeWindows. In some embodiments, the intersection structure is based on a logical AND operation.
In some embodiments, the present invention provides for a specifically programmed schedule management computer system, including at least: at least one specialized computer machine, including: a non-transient memory, electronically storing particular computer executable program code; and at least one computer processor which, when executing the particular program code, becomes a specifically programmed computer processor of the specifically programmed schedule management computer system that is configured to concurrently perform at least the following operations: electronically causing, via a computer network, to display a first specialized schedule graphical user interface (a first specialized schedule GUI) on a screen of each computing device associated with each user of a plurality of users; where the first specialized schedule GUI is configured to allow each user to: i) define at least one programmed schedule object, including a plurality of availability time periods (a plurality of TimeWindows), and ii) associate at least one programmed schedule object with at least one of: 1) at least one user, 2) at least one resource, and 3) at least one service; where each TimeWindow is: i) defined by a plurality of TimeWindow parameters, and ii) configured to identify whether a corresponding time period is available for booking or unavailable for booking; where the plurality of TimeWindow parameters include: i) at least one first TimeWindow parameter, identifying a start date for the corresponding time period, ii) at least one second TimeWindow parameter, identifying a start time for the corresponding time period, iii) at least one third TimeWindow parameter, identifying an end time for the corresponding time period, iv) at least one fourth TimeWindow parameter, identifying at least one day of a week associated with the corresponding time period, and v) at least one fifth TimeWindow parameter, identifying a period type of the corresponding time period; electronically and in real-time, generating, based, at least in part, on the at least one fourth TimeWindow parameter, a first bitmask of days in a week for the corresponding time period of each TimeWindow of the plurality of TimeWindows; electronically and in real-time, storing a plurality of schedule objects associated with the plurality of users in at least one specifically dedicated database; electronically causing, via the computer network, to display a second specialized schedule graphical user interface (a second specialized schedule GUI) on a screen of a computing device associated with a particular user, where the second specialized schedule GUI is configured to allow each user to submit an electronic query seeking to determine when a particular time period associated with at least one user is available for booking or unavailable for booking; electronically receiving, via the computer network, the electronic query of the particular user; electronically and in real-time, determining, based on the electronic query of the particular user, a set of TimeWindows selected from the plurality of schedule objects related to at least one of 1) the at least one user, 2) the at least one resource, and 3) the at least one service; electronically and in real-time, determining, based on the electronic query of the particular user, a set of TimeWindows selected from the plurality of schedule objects related to at least one of 1) the at least one user, 2) the at least one resource, and 3) the at least one service; electronically and in real-time, generating a union structure of the set of TimeWindows; electronically and in real-time, determining, based on the first bitmask associated with each TimeWindow of the set of TimeWindows, a second bitmask corresponding to the at least one union; electronically and in real-time, determining an intersection structure between the union and the electronic query of the particular user to identify at least one matched day of the week between the at least one union and the particular time period identified in the electronic query of the particular user; electronically and in real-time, determining when the at least one matched day of the week includes the particular time period identified in the electronic query of the particular user, based, at least in part, on: 1) the at least one second TimeWindow parameter of a particular TimeWindow associated with the at least one matched day of the week; 2) the at least one third TimeWindow parameter of the particular TimeWindow associated with the at least one matched day of the week; 3) the at least one second TimeWindow parameter of the particular time period identified in the electronic query of the particular user; and 4) the at least one third TimeWindow parameter of the particular time period identified in the electronic query of the particular user; and electronically and in real-time, performing one of: i) booking the particular time period for the particular user when the at least one matched day of the week includes the particular time period identified in the electronic query of the particular user; and ii) generating an indication identifying that the particular time period is unavailable for booking when the at least one matched day of the week excludes the particular time period identified in the electronic query of the particular user.
As generally illustrated herein, the system embodiments can incorporate a variety of computer readable media that comprise computer usable medium having computer readable code means embodied therein. One skilled in the art will recognize that the software associated with the various processes described can be embodied in a wide variety of computer accessible media from which the software is loaded and activated. Pursuant to In re Beauregard, 35 USPQ2d 1383 (U.S. Pat. No. 5,710,578), the present invention anticipates and includes this type of computer readable media within the scope of the invention. Pursuant to In re Nuijten, 500 F.3d 1346 (Fed. Cir. 2007) (U.S. patent application Ser. No. 09/211,928), the present invention scope is limited to computer readable media wherein the media is both tangible and non-transitory.
The method and system of the present invention have been described above and in the attached drawings; however, modifications will be apparent to those of ordinary skill in the art and the scope of protection for the invention is to be defined by the claims that follow.
1. A computer-implemented method, comprising:
electronically causing, via a computer network, by at least one specifically programmed computer processor of a schedule management computer system executing software to perform the method, to display a first specialized schedule graphical user interface (a first specialized schedule GUI) on a screen of each remotely distributed computing device associated with each user of a plurality of users; wherein the plurality of users are associated with a plurality of remotely distributed computing devices;
executing, in real-time, by the at least one specifically programmed computer processor, a programmed software scheduling module which at least perform the following operations:
electronically and in real-time, storing a plurality of programmed software schedule objects associated with the plurality of users in at least one specifically dedicated database, wherein each programmed software schedule object comprises the plurality of bitmask data objects;
electronically receiving, via the computer network, the electronic query of the particular user;
electronically and in real-time, determining, based on the electronic query of the particular user, a set of programmed software schedule objects related to at least one of 1) the at least one user, 2) the at least one resource, and 3) the at least one service; and generating an electronic scheduling alert on a screen of remotely distributed computing device associated with a particular user, wherein the electronic scheduling alert identifies a particular available time period based on the set of programmed software schedule objects.