User Guide
McScheduler is a one-stop solution for McDonald’s Shift Managers to manage shift scheduling, as well as worker contacts and compensation, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). With the McScheduler, all information needed for shift-work assignment is made easily available to streamline the work of McDonald’s Shift Managers.
- Quick start
 - Features
 - FAQ
 - Command summary
 
Quick start
- 
    
Ensure you have Java
11or above installed on your computer. - 
    
Download the latest
mcscheduler.jarhere. - 
    
Copy the file to the folder you wish to use as the home folder for the McScheduler.
 - 
    
Double-click the file to start the app. The GUI (similar to the image below) should appear in a few seconds. The app contains some sample data.

 - 
    
Type a command in the command box and press
Enterto execute it.
e.g. Typinghelpand pressingEnterwill open the help window.
Some example commands you can try:- 
        
worker-list: Lists all workers in the McScheduler. - 
        
worker-addn/John hp/98765432 a/21 Lower Kent Ridge Rd, Singapore 119077 r/Cashier p/7: Adds a cashier named John whose pay is $7/hr. His phone number is 98765432 and he lives at 21 Lower Kent Ridge Rd, Singapore 119077. - 
        
worker-delete3: Deletes the 3rd worker shown in the worker list. - 
        
shift-addd/Wed t/AM r/Cashier 2 r/Janitor 3: Adds a Wednesday AM shift, which requires 2 workers to fill the cashier role and 3 workers to fill the janitor role. - 
        
assigns/3 w/2 r/Cashier: Assigns the 2nd worker on the list to the 3rd shift on the list as a cashier. - 
        
exit: Exits the app. 
 - 
        
 - 
    
Refer to the Features below for details of each command.
 
Features
 Notes about the command format:
- 
      
Words in
UPPER_CASEare the parameters to be supplied by the user.
e.g. in the commandworker-delete WORKER_INDEX,WORKER_INDEXis a parameter for the index of the worker (in the worker list) you wish to delete from the application. The command can be used asworker-delete 4. - 
      
Parameters in
[square brackets]are optional.
e.g.n/NAME [r/ROLE]can be used asn/John Doe r/Cashieror asn/John Doe.[u/UNAVAILABLE_DAY [UNAVAILABLE_TIME]]can be used as ` ` (i.e. the entire parameter is not provided), asu/Mon(i.e.UNAVAILABILITY_TIMEis not provided) or asu/Mon am. - 
      
Parameters with
… after them can be used multiple times.
e.g.w/WORKER_INDEXcan be used asw/1,w/1 w/2,w/1 w/2 w/3etc. - 
      
For parameters without
…after them, if provided more than once, only the last value provided will be taken. eg. ifn/Alex n/Betty n/Charlieis provided forn/NAME, the name taken will be Charlie. - 
      
When
[square brackets]are used with…, parameters can be used multiple times including zero times.
e.g.[r/ROLE NUMBER_NEEDED]…can be used as(i.e. 0 times),r/Cashier 3,r/Cashier 1 r/Janitor 2etc. - 
      
Parameters in
{curly brackets}are a set and should be used together. e.g.{w/WORKER_INDEX ROLE}…should be used asw/1 Cashier,w/1 Cashier w/2 Janitor w/3 Chefetc. - 
      
Parameters can be provided in any order, unless otherwise specified.
e.g. if the command specifiesn/NAME hp/PHONE_NUMBER,hp/PHONE_NUMBER n/NAMEis also acceptable. 
Worker-related features
Adding a worker: worker-add
Adds a new worker to the McScheduler.
Format: worker-add n/NAME hp/PHONE_NUMBER a/ADDRESS p/HOURLY_PAY [r/ROLE]... [u/UNAVAILABLE_DAY [UNAVAILABLE_TIME]]...
- Adds a worker with the specified 
NAME,PHONE_NUMBER,ADDRESS,HOURLY_PAYandROLE(s). - 
HOURLY_PAYmust be a positive number not exceeding 1000, with a maximum of 2 decimal places. - We allow the workers to share 
PHONE_NUMBERandADDRESS. - The 
PHONE_NUMBERhas to be a valid Singapore phone number (8 digits, starting with 6, 8 or 9 only). - The worker will be fit to take on the specified 
ROLE(s) in a shift. The specifiedROLE(s) must be an existing role in the McScheduler. A role can be added to the McScheduler using the role-add command. - 
UNAVAILABLE_DAYshould take one of these values: Mon, Tue, Wed, Thu, Fri, Sat, Sun. These values are case-insensitive (i.e.Mon,MON,monetc. are all accepted). - 
UNAVAILABLE_TIMEis optional but should take one of these values if specified: AM, PM. These values are case-insensitive (i.e.aM,Pm,PM, etc. are all accepted). - The worker will be unavailable for the entire day if no 
UNAVAILABLE_TIMEis specified. Else, they will be unavailable on the specifiedUNAVAILABLE_DAYat the specifiedUNAVAILABLE_TIME. 
r/ parameters.
A worker can have any number of unavailable timings (including zero) that can be added by multiple u/ parameters.
Examples:
- 
worker-add n/John hp/98765432 a/21 Lower Kent Ridge Rd, Singapore 119077 r/Cashier p/7Adds a cashier named John whose pay is $7/hr. His phone number is 98765432 and he lives at 21 Lower Kent Ridge Rd, Singapore 119077.- Output: 
New worker added: John Phone: 9876 5432 Hourly pay: $7.00/hr Address: 21 Lower Kent Ridge Rd, Singapore 119077 Roles: Cashier Unavailable Timings: 
 - Output: 
 - 
worker-add n/Tom hp/87654321 a/22 Bong Keng Road, #01–01 r/Burger Flipper r/Janitor p/7.50 u/Mon AMAdds a worker named Tom who is fit to be a burger flipper or a janitor, and whose pay is $7.50/hr. His phone number is 87654321 and he lives at Bong Keng Road, #01–01. He is unavailable for work on Monday mornings.- Output: 
New worker added: Tom Phone: 8765 4321 Hourly pay: $7.50/hr Address: 22 Bong Keng Road, #01–01 Roles: [Janitor, Burger flipper] Unavailable Timings: [MON AM] 
 - Output: 
 
Listing all workers: worker-list
Shows a list of all workers in the McScheduler, including their contacts, hourly pay, assigned shifts and unavailable timings.
Format: worker-list
- Output: 
Listed all workers - Additional parameters after the command 
worker-listwill throw anUnexpected argumenterror.- e.g. 
worker-list asdfwill return the following error:Unexpected argument for command "worker-list": asdf. 
 - e.g. 
 
Editing a worker: worker-edit
Edits an existing worker in the McScheduler.
Format: worker-edit WORKER_INDEX [n/NAME] [hp/PHONE_NUMBER] [a/ADDRESS] [p/HOURLY_PAY] [r/ROLE]... [u/UNAVAILABLE_DAY [UNAVAILABLE_TIME]]...
- Edits the worker at the specified 
WORKER_INDEX. The worker index refers to the index number shown in the displayed worker list. The worker index must be a positive integer i.e. 1, 2, 3, … - At least one of the optional fields must be provided.
 - Existing values will be updated to the input values.
 - 
HOURLY_PAYmust be a positive number not exceeding 1000, with a maximum of 2 decimal places. - We allow the workers to share 
PHONE_NUMBERandADDRESS. - The 
PHONE_NUMBERhas to be a valid Singapore phone number (8 digits, starting with 6, 8 or 9 only). - When editing roles, the existing roles of the worker will be removed i.e adding of roles is not cumulative.
 - The specified 
ROLE(s) must be an existing role in the McScheduler. A role can be added to the McScheduler using the role-add command. - When editing unavailabilities, the existing unavailabilities of the worker will be removed i.e. adding of unavailabilities is not cumulative.
 - 
UNAVAILABLE_DAYshould take one of these values: Mon, Tue, Wed, Thu, Fri, Sat, Sun. These values are case-insensitive (i.e.Mon,MON,monetc. are all accepted). - 
UNAVAILABLE_TIMEis optional but should take one of these values if specified: AM, PM. These values are case-insensitive (i.e.aM,Pm,PM, etc. are all accepted). - The edited worker will be unavailable for the entire day if no 
UNAVAILABLE_TIMEis specified. Else, they will be unavailable on the specifiedUNAVAILABLE_DAYat the specifiedUNAVAILABLE_TIME. 
r/ without specifying any roles after it.
Examples:
- 
worker-edit 1 n/John r/JanitorEdits the name and role of the 1st worker to be John and janitor respectively.- Output: 
Edited worker: John Phone: 8743 8807 Hourly pay: $10.00/hr Address: Blk 30 Geylang Street 29, #06-40 Roles: [Janitor] Unavailable Timings: [MON PM] 
 - Output: 
 - 
worker-edit 2 n/Betsy Crower p/7 u/MonEdits the name, pay and unavailable timings of the 2nd worker to be Betsy Crower, $7/hr and Mondays respectively.- Output: 
Edited worker: Betsy Crower Phone: 9927 2758 Hourly pay: $7.00/hr Address: Blk 30 Lorong 3 Serangoon Gardens, #07-18 Roles: [Janitor, Cashier] Unavailable Timings: [MON AM][MON PM] 
 - Output: 
 
Locating workers by name: worker-find
Finds workers whose names contain any of the given keywords.
Format: worker-find KEYWORD...
- The search is case-insensitive. e.g. 
hanswill matchHans - The order of the keywords does not matter. e.g. 
Hans Bowill matchBo Hans - Only the name is searched.
 - Only full words will be matched e.g. 
Hanwill not matchHans - Workers matching at least one keyword will be returned (i.e. 
ORsearch). e.g.Hans Bowill returnHans Gruber,Bo Yang 
Examples:
- 
worker-find JohnreturnsjohnandJohn Doe- Output: 
2 workers listed! 
 - Output: 
 - 
worker-find alex davidreturnsAlex YeohandDavid Li- Output: 
2 workers listed! 
 - Output: 
 
Deleting a worker: worker-delete
Deletes a worker from the McScheduler.
Format: worker-delete WORKER_INDEX
- Deletes the worker at the specified 
WORKER_INDEX. The index refers to the index number shown in the displayed worker list. The worker index must be a positive integer i.e. 1, 2, 3, … 
Example:
- 
worker-delete 4Deletes the 4th worker shown in the worker list.- Output: 
Deleted worker: Tom Phone: 8765 4321 Hourly pay: $7.50/hr Address: 22 Bong Keng Road, #01–01 Roles: [Janitor, Burger flipper] Unavailable Timings: [MON AM] 
 - Output: 
 
Calculating a worker’s pay for the week: worker-pay
Calculates a worker’s pay for the week.
Format: worker-pay WORKER_INDEX
- Calculates the total pay for the week for the worker at the specified 
WORKER_INDEX. The index refers to the index number shown in the displayed worker list. The worker index must be a positive integer i.e. 1, 2, 3, … - Each AM and PM shift is 8 hours long.
 
Example:
- 
worker-pay 4Calculate the total pay for the week for the 4th worker shown in the worker list.- Output: 
David Li's pay for the week:
$0.99/hr x 8hr/shift x 1 shift(s) = $7.92 
 - Output: 
 
Shift-related features
Adding a shift: shift-add
Adds a new shift to the McScheduler.
Format: shift-add d/DAY t/TIME [r/ROLE NUMBER_NEEDED]...
- Adds a shift on the specified 
DAYat the specifiedTIME. - The day specified should take one of these values: Mon, Tue, Wed, Thu, Fri, Sat, Sun. These values are case-
insensitive i.e. 
Mon,MON,monetc. are all accepted. - The time specified should take one of these values: AM, PM. These values are case-insensitive i.e. 
am,AM,aMandAmare all accepted. - The shift will require worker(s) to fill the specified 
ROLE(s). The specifiedROLE(s) must be an existing role in the McScheduler. A role can be added to the McScheduler using the role-add command. - Each role should be accompanied by the 
NUMBER_NEEDEDto fill that role. This number must be a positive integer with no leading zeroes i.e. 1, 2, 3, … - 
NUMBER_NEEDEDmust not exceed 50 i.e. there can only be at most 50 workers for each role. 
Examples:
- 
shift-add d/Wed t/AM r/Cashier 2 r/Janitor 3Adds a Wednesday AM shift, which requires 2 workers to fill the cashier role and 3 workers to fill the janitor role.- Output: 
New shift added: Day: WED Time: AM Role requirements: Role Required: Cashier x 2 Role Required: Janitor x 3 
 - Output: 
 - 
shift-add d/MON t/pMAdds a Monday PM shift with no required roles yet.- Output: 
New shift added: Day: MON Time: PM Role requirements: 
 - Output: 
 
Listing all shifts: shift-list
Shows a list of all shifts in the McScheduler, including the roles needed and workers assigned to each shift.
Format: shift-list
- Output: 
Listed all shifts - Additional parameters after the command 
shift-listwill throw anUnexpected argumenterror.- e.g. 
shift-list asdfwill return the following error:Unexpected argument for command "shift-list": asdf. 
 - e.g. 
 
Editing a shift: shift-edit
Edits the details of an existing shift in the McScheduler.
Format: shift-edit SHIFT_INDEX [d/DAY] [t/TIME] [r/ROLE NUMBER_NEEDED]...
- Edits the shift at the specified 
SHIFT_INDEX. The shift index refers to the index number shown in the displayed shift list. The shift index must be a positive integer i.e. 1, 2, 3, … - At least one of the optional fields must be provided.
 - Existing values will be updated to the input values.
 - Existing role requirements will be overwritten by the new role requirements.
 - The day specified should take one of these values: Mon, Tue, Wed, Thu, Fri, Sat, Sun. These values are case-
insensitive i.e. 
Mon,MON,mon,mOnetc. are all accepted. - The time specified should take one of these values: AM, PM. These values are case-insensitive i.e. 
am,AM,aMandAmare all accepted. - The specified 
ROLE(s) must be an existing role in the McScheduler. A role can be added to the McScheduler using the role-add command. - Each role should be accompanied by the 
NUMBER_NEEDEDto fill that role. This number must be a positive integer with no leading zeroes i.e. 1, 2, 3, … - 
NUMBER_NEEDEDmust not exceed 50 i.e. there can only be at most 50 workers for each role within a shift. 
Examples:
- 
shift-edit 3 r/Cashier 3 r/Janitor 2Edits the 3rd shift on the list such that it now requires 3 cashiers and 2 janitors.- Output: 
Edited Shift: Day: WED Time: AM Role requirements: Role Required: Cashier x 3 Role Required: Janitor x 2 
 - Output: 
 - 
shift-edit 1 d/Mon t/PM r/Janitor 1Edits the 1st shift such that it is now a Monday PM shift, requiring 1 janitor only.- Output: 
Edited Shift: Day: MON Time: PM Role requirements: Role Required: Janitor x 1 
 - Output: 
 - 
shift-edit 2 r/Edits the 2nd shift such that it now has no required roles.- Output: 
Edited Shift: Day: TUE Time: PM Role requirements: 
 - Output: 
 
Locating shifts by day or time: shift-find
Finds shifts whose day or time contain any of the given keywords.
Format: shift-find KEYWORD...
- The search is case-insensitive. e.g. 
monwill matchMON. - Only the day and time are searched.
 - Only full words will be matched e.g. 
mwill not matchMON - Shifts matching at least one keyword will be returned (i.e. 
ORsearch).- e.g. 
MON AMwill return aTUE AMshift and aMON PMshift. 
 - e.g. 
 
Examples:
- 
shift-find Fri PMreturns all shifts on Friday and all PM shifts. i.e.FRI PM,THU PMandFRI AMshift will all be returned.- Output: 
2 shifts listed! 
 - Output: 
 - 
shift-find Monreturns aMON AMshift and aMON PMshift.- Output: 
2 shifts listed! 
 - Output: 
 - 
shift-find AM PMreturns all shifts.- Output: 
4 shifts listed! 
 - Output: 
 
Deleting a shift: shift-delete
Deletes a shift from the McScheduler.
Format: shift-delete SHIFT_INDEX
- Deletes the shift at the specified 
SHIFT_INDEX. The index refers to the index number shown in the displayed shift list. The shift index must be a positive integer i.e. 1, 2, 3, … 
Example:
- 
shift-delete 2Deletes the 2nd shift on the list.- Output: 
Deleted Shift: Day: WED Time: AM Role requirements: Role Required: Cashier x 3 Role Required: Janitor x 2 
 - Output: 
 
Role-related features
Adding a role: role-add
Adds a new role to the McScheduler.
Format: role-add ROLE
- Adds the specified 
ROLEto the McScheduler. The specifiedROLEshould be alphanumeric and can contain spaces. - The specified 
ROLEcannot be too long (max 50 char). 
Examples:
- 
role-add cashierAdds a cashier role.- Output: 
New role added: Cashier 
 - Output: 
 - 
role-add Storey 2 serverAdds a storey 2 server role.- Output: 
New role added: Storey 2 server 
 - Output: 
 
Editing a role: role-edit
Edits an existing role in the McScheduler.
Format: role-edit ROLE_INDEX ROLE
- Edits the role at the specified 
ROLE_INDEX. The role index refers to the index number shown in the displayed role list. The role index must be a positive integer i.e. 1, 2, 3, … - The specified 
ROLEshould be alphanumeric and can contain spaces (max 50 char). 
Example:
- 
role-edit 1 burger flipperEdits the 1st role to be burger flipper.- Output: 
Edited role: Burger flipper | Previous role: Chef 
 - Output: 
 
Deleting a role: role-delete
Deletes a role from the McScheduler.
Format: role-delete ROLE_INDEX
- Deletes the role at the specified 
ROLE_INDEX. The index refers to the index number shown in the role list displayed. The role index must be a positive integer i.e. 1, 2, 3, … 
Example:
- 
role-delete 3Deletes the 3rd role shown in the role list.- Output: 
Deleted role: Storey 2 server 
 - Output: 
 
Assignment-related features
Listing all available workers for a shift and role: worker-avail
Shows a list of all workers and their corresponding index in the full worker list, who are available for a particular shift under a particular role.
Format: worker-avail SHIFT_INDEX r/ROLE
- Shows a list of available workers who can work as the specified 
ROLEfor the shift at the specifiedSHIFT_INDEX. The index refers to the index number shown in the displayed shift list. The shift index must be a positive integer i.e. 1, 2, 3, … - 
ROLEmust be a valid role that has already been added to the list of approved roles. See role-add. 
Example:
- 
worker-avail 4 r/ChefShow a list of available workers who can work as chefs for the 4th shift shown in the shift list.- Output: 
List of available workers for shift 4 (Role: Janitor)
1 Alex Yeoh
2 Betsy Crower
6 Roy Balakrishnan
8 Tom 
 - Output: 
 
Assigning a worker to a role in a shift: assign
Assigns an existing worker to take on an existing role in an existing shift.
Format: assign s/SHIFT_INDEX {w/WORKER_INDEX ROLE}...
- Assigns the worker(s) at the specified 
WORKER_INDEXto the shift at the specifiedSHIFT_INDEX. The indexes refer to the index numbers shown in the displayed worker and shift lists. The indexes must be positive integers i.e. 1, 2, 3, … - The assigned worker(s) will fill up the specified 
ROLEin the shift. The worker(s) must be fit for the specifiedROLEand the shift must require theROLE.- 
Leaveis also accepted: workers can be assigned the leave status for any shift with no limit. 
 - 
 - Each worker can only be assigned to one 
ROLEfor a given shift. e.g. A worker cannot work as both chef and cashier for the same shift. - Each worker index should appear only once (i.e. no duplicates) since each worker can only be assigned to one role for a given shift.
 
Example:
- 
assign s/3 w/2 CashierAssigns the 2nd worker on the worker list to the 3rd shift on the shift list as a cashier.- Output: 
1 new assignment(s) added:
Shift: FRI PM - Worker: Betsy Crower (Role: Cashier) 
 - Output: 
 - 
assign s/3 w/1 Cashier w/3 ChefAssigns the 1st worker as a cashier and the 3rd worker as a chef to the 3rd shift.- Output: 
2 new assignment(s) added:
Shift: FRI PM - Worker: Charlotte Oliveiro (Role: Chef)
Shift: FRI PM - Worker: Alex Yeoh (Role: Cashier) 
 - Output: 
 
Removing a worker from a shift: unassign
Removes a worker from a particular shift.
Format: unassign s/SHIFT_INDEX w/WORKER_INDEX...
- Unassigns the worker(s) at the specified 
WORKER_INDEXfrom the shift at the specifiedSHIFT_ INDEX. The indexes refer to the index numbers shown in the displayed worker and shift lists. The indexes must be positive integers i.e. 1, 2, 3, … 
Examples:
- 
unassign s/3 w/2Unassigns the 2nd worker on the worker list from the 3rd shift on the shift list.- Output: 
1 shift assignment(s) removed:
Shift: FRI PM - Worker: Betsy Crower (Role: Cashier) 
 - Output: 
 - 
unassign s/3 w/1 w/3Unassigns the 1st worker and the 3rd worker from the 3rd shift.- Output: 
2 shift assignment(s) removed:
Shift: FRI PM - Worker: Charlotte Oliveiro (Role: Chef)
Shift: FRI PM - Worker: Alex Yeoh (Role: Cashier) 
 - Output: 
 
Reassigning an existing assignment: reassign
Reassigns an existing assignment in the McScheduler, similar to an assignment edit.
Formats: 
1.reassign so/OLD_SHIFT_INDEX wo/OLD_WORKER_INDEX sn/NEW_SHIFT_INDEX wn/NEW_WORKER_INDEX r/ROLE
- Reassigns an existing assignment using the indexes provided such that the worker at 
NEW_WORKER_INDEXwill be assigned to the shift atNEW_SHIFT_INDEXfor the specifiedROLE. The indexes must be positive integers i.e. 1,2, 3, … - The old assignment involving the worker at the specified 
OLD_WORKER_INDEXand the shift atOLD_SHIFT_INDEXmust exist. The old assignment will be edited during a successfulreassigncall. - The 
OLD_WORKER_INDEXcan be the same as theNEW_WORKER_INDEX. TheOLD_SHIFT_INDEXcan be the same as theNEW_SHIFT_INDEX. This allows workers to be reassigned to the same shift but under a differentROLE. Alternatively, the 2ndreassigncommand format listed below can be used to achieve this in a more efficient manner. - No reassignment will be made if there already exists a duplicate assignment in the McScheduler.
 - Each worker can only be assigned to one 
ROLEfor a given shift. e.g. A worker cannot work as both chef and cashier for the same shift. 
Examples:
- 
reassign so/4 wo/1 sn/4 wn/2 r/ChefReassigns an existing assignment (involving the 1st worker on the worker list and the 4th shift on the shift list), such that the 2nd worker on the worker list is assigned to the 4th shift on the shift list as a Chef.- Output: 
Reassignment made: Shift: SUN PM - Worker: Betsy Crower (Role: Chef) | Previous Role: Chef 
 - Output: 
 - 
reassign so/1 wo/2 sn/3 wn/2 r/CashierReassigns an existing assignment (involving the 2nd worker on the worker list and the 1st shift on the shift list), such that the 2nd worker in the worker list is assigned to the 3rd shift on the shift list as a Cashier.- Output: 
Reassignment made: Shift: FRI PM - Worker: Betsy Crower (Role: Cashier) | Previous Role: Cashier 
 - Output: 
 
2.reassign s/SHIFT_INDEX w/WORKER_INDEX r/NEW_ROLE
- Reassigns an existing assignment using the indexes provided such that the worker at 
WORKER_INDEXwill be assigned to the roleNEW_ROLEin the shift specified bySHIFT_INDEX. The indexes must be positive integers i.e. 1,2, 3, … - The old assignment involving the worker at the specified 
WORKER_INDEXand the shift atSHIFT_INDEXmust exist. The old assignment will be edited during a successfulreassigncall. - No reassignment will be made if there already exists a duplicate assignment in the McScheduler (i.e. the worker specified by 
WORKER_INDEXis already assigned to the role specified byNEW_ROLEunder the shift specified bySHIFT_INDEX). 
Example:
- 
reassign s/4 w/4 r/ChefReassigns the 4th worker on the worker list as a Chef in the 4th shift on the shift list.- Output: 
Reassignment made: Shift: SUN PM - Worker: David Li (Role: Chef) | Previous Role: Cashier 
 - Output: 
 
Leave-related features
Assigning a worker to take leave during a shift: take-leave
Assigns a worker to take leave at a particular day and time, as indicated by a shift.
Format: take-leave s/SHIFT_INDEX w/WORKER_INDEX...
- Assigns worker(s) to take leave on the shift at the specified 
SHIFT_INDEXin the shift list. The worker(s) taking leave will be the worker(s) at the specifiedWORKER_INDEXin the worker list. - The order of specifying does not matter, as long as ‘s/’ is attached to the 
SHIFT_INDEXand ‘w/’ is attached to theWORKER_INDEX.
e.g.take-leave s/4 w/1is equivalent totake-leave w/1 s/4. - An error message will be shown if any of the workers are unavailable for that shift, since there is no reason to take leave then.
 
Example:
- 
take-leave s/4 w/4Assigns the 4th worker to take leave during the 4th shift.- Output: 
[Leave taken] Reassignment made: Shift: SUN PM - Worker: David Li (Role: Leave) | Previous Role: Chef 
 - Output: 
 - 
take-leave s/4 w/1 w/3Assigns the 1st and 3rd worker to take leave during the 4th shift.- Output: 
[Leave taken] 2 new assignment(s) added:
Shift: SUN PM - Worker: Alex Yeoh (Role: Leave)
Shift: SUN PM - Worker: Charlotte Oliveiro (Role: Leave) 
 - Output: 
 
Assigning a worker leave over a range of days and times: mass-take-leave
Assigns a worker to take leave over a range of days and times given a start and end day/time.
Format: mass-take-leave w/WORKER_INDEX d/START_DAY t/START_TIME d/END_DAY t/END_TIME
- Assigns a worker to take leave on all shifts between the specified 
START_DAYandSTART_TIMEtoEND_DAYandEND_TIME. The worker taking leave will be the worker at the specifiedWORKER_INDEXin the worker list. - The order of specifying does matter between the two sets of days and times (i.e. 
START_DAYmust come beforeEND_DAYand similarly for time). Specifying in the wrong order is likely to result in leave taken in the wrong shifts. - However, the order does not matter for all other arguments. 
e.g.mass-take-leave w/2 d/MON t/AM d/FRI t/PMis the same asmass-take-leave t/AM t/PM d/MON d/FRI w/2, though the latter syntax is not recommended. - The day/time range will loop properly between Sunday and Monday. Hence 
mass-take-leave w/2 d/SUN t/AM d/MON t/AMwill work as intended - leave taken on Sunday morning to Monday morning. - Shifts will be created for all day and time combinations within the specified range that does not have a shift already present within the McScheduler. These shifts will have no role requirements.
 - While the command will still go through, a warning message will be shown when the worker has an assigned role in any one of the shifts within the day/time range.
 
Examples:
- 
mass-take-leave w/2 d/MON t/PM d/THU t/PMAssigns the 2nd worker to take leave from MON PM shift to THU PM shift (inclusive).- Output: 
Leave added for Betsy Crower from MON PM to THU PM. 
 - Output: 
 - 
mass-take-leave w/1 d/THU t/PM d/MON t/PMAssigns the 1st worker to take leave from THU PM shift to MON PM shift (inclusive).- Output: 
Leave added for Alex Yeoh from THU PM to MON PM. 
 - Output: 
 
Cancelling a worker’s leave for a shift: cancel-leave
Cancels a worker’s leave at a particular day and time, as indicated by a shift.
Format cancel-leave s/SHIFT_INDEX w/WORKER_INDEX...
- Cancel’s worker(s)’ leave on the shift at the specified 
SHIFT_INDEXin the shift list. The worker whose leave is cancelled will be the worker(s) at the specifiedWORKER_INDEXin the worker list. - The order of specifying does not matter, as long as ‘s/’ is attached to the 
SHIFT_INDEXand ‘w/’ is attached to theWORKER_INDEX.
e.g.cancel-leave s/4 w/1is equivalent tocancel-leave w/1 s/4. - An error message will be shown in the following situations:
    
- No leave found for the worker(s) at the specified shift.
 - An assignment other than leave is found for the worker(s) at the specified shift.
 
 
Examples:
- 
cancel-leave s/4 w/4Cancels the leave of the 4th worker for the 4th shift.- Output: 
[Leave Cancelled] 1 shift assignment(s) removed:
Shift: SUN PM - Worker: David Li (Role: Leave) 
 - Output: 
 - 
cancel-leave s/4 w/1 w/3Cancels the leave of the 1st and the 3rd worker for the 4th shift.- Output: 
[Leave Cancelled] 2 shift assignment(s) removed:
Shift: SUN PM - Worker: Charlotte Oliveiro (Role: Leave)
Shift: SUN PM - Worker: Alex Yeoh (Role: Leave) 
 - Output: 
 
Cancelling a worker’s leave over a range of days and times: mass-cancel-leave
Cancels a worker’s leave over a range of days and times given a start and end day/time.
Format: mass-cancel-leave w/WORKER_INDEX d/START_DAY t/START_TIME d/END_DAY t/END_TIME
- Cancels a worker’s leave on all shifts between the specified 
START_DAYandSTART_TIMEtoEND_DAYandEND_TIME. The worker cancelling leave will be the worker at the specifiedWORKER_INDEXin the worker list. - The order of specifying does matter between the two sets of days and times (i.e. 
START_DAYmust come beforeEND_DAYand similarly for time). Specifying in the wrong order is likely to result in leave cancelled in the wrong shifts. - However, the order does not matter for all other arguments. 
e.g.mass-cancel-leave w/2 d/MON t/AM d/FRI t/PMis the same asmass-cancel-leave t/AM t/PM d/MON d/FRI w/2, though the latter syntax is not recommended. - The day/time range will loop properly between Sunday and Monday. Hence 
mass-cancel-leave w/2 d/SUN t/AM d/MON t/AMwill work as intended - leave cancelled from Sunday morning to Monday morning. - An error message will be shown in the following situations:
    
- The worker has no leave in the given day/time range.
 
 
Examples:
- 
mass-cancel-leave w/2 d/MON t/PM d/THU t/PMCancels the 2nd worker’s leave between MON PM shift to THU PM shift (inclusive).- Output: 
Leave cancelled for Betsy Crower from MON PM to THU PM. 
 - Output: 
 - 
mass-cancel-leave w/1 d/THU t/PM d/MON t/PMCancels the 1st worker leave between THU PM shift to MON PM shift (inclusive).- Output: 
Leave cancelled for Alex Yeoh from THU PM to MON PM. 
 - Output: 
 
General features
Viewing help: help
Shows a message explaining how to access the help page.

Format: help
- Additional parameters after the command 
helpwill throw anUnexpected argumenterror.- e.g. 
help asdfwill return the following error:Unexpected argument for command "help": asdf. 
 - e.g. 
 
Deleting all existing data in McScheduler: clear
Delete all existing data (Worker, Shift, Assignment and Role) in McScheduler.
Format: clear
- Output: 
The McScheduler has been cleared! - Additional parameters after the command 
clearwill throw anUnexpected argumenterror.- e.g. 
clear asdfwill return the following error:Unexpected argument for command "clear": asdf. 
 - e.g. 
 
Exiting the program : exit
Exits the program.
Format: exit
- Additional parameters after the command 
exitwill throw anUnexpected argumenterror.- e.g. 
exit asdfwill return the following error:Unexpected argument for command "exit": asdf. 
 - e.g. 
 
Saving the data
McScheduler data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
FAQ
Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the default data file it creates with the file that contains
the data of your previous McScheduler home folder.
Command summary
| Data | Action | Format, Example | 
|---|---|---|
| Worker | Add | 
worker-add n/NAME hp/PHONE_NUMBER a/ADDRESS p/HOURLY_PAY [r/ROLE]... [u/UNAVAILABLE_DAY [UNAVAILABLE_TIME]]...e.g. worker-add n/John hp/98765432 a/21 Lower Kent Ridge Rd, Singapore 119077 r/Cashier p/7 u/Mon am
 | 
    
| Worker | Delete | 
worker-delete WORKER_INDEXe.g. worker-delete 4
 | 
    
| Worker | Edit | 
worker-edit WORKER_INDEX [n/NAME] [hp/PHONE_NUMBER] [a/ADDRESS] [p/HOURLY_PAY] [r/ROLE]... [u/UNAVAILABLE_DAY [UNAVAILABLE_TIME]]...e.g. worker-edit 2 n/Betsy Crower p/7 u/Mon
 | 
    
| Worker | List | worker-list | 
    
| Worker | Find | 
worker-find KEYWORD...e.g. worker-find alex david
 | 
    
| Worker | Pay | 
worker-pay WORKER_INDEXe.g. worker-pay 1
 | 
    
| Shift | Add | 
shift-add d/DAY t/TIME [r/ROLE NUMBER_NEEDED]...e.g. shift-add d/Wed t/AM r/Cashier 2 r/Janitor 3
 | 
    
| Data | Action | Format, Example | 
|---|---|---|
| Shift | Delete | 
shift-delete SHIFT_INDEXe.g. shift-delete 2
 | 
    
| Shift | Edit | 
shift-edit SHIFT_INDEX [d/DAY] [t/TIME] [r/ROLE NUMBER_NEEDED]...e.g. shift-edit 1 d/Mon t/PM r/Janitor 1
 | 
    
| Shift | List | shift-list | 
    
| Shift | Find | 
shift-find KEYWORD...e.g. shift-find Fri PM
 | 
    
| Role | Add | 
role-add ROLEe.g. role-add Storey 2 server
 | 
    
| Role | Delete | 
role-delete ROLE_INDEXe.g. role-delete 3
 | 
    
| Role | Edit | 
role-edit ROLE_INDEX NEW_ROLEe.g. role-edit 1 burger flipper
 | 
    
| Assignment | Show Available Workers | 
worker-avail SHIFT_INDEX r/ROLEe.g. worker-avail 1 r/Chef
 | 
    
| Assignment | Assign | 
assign s/SHIFT_INDEX {w/WORKER_INDEX ROLE}...e.g. assign s/3 w/2 Cashier w/3 Chef
 | 
    
| Assignment | Unassign | 
unassign s/SHIFT_INDEX w/WORKER_INDEX...e.g. unassign s/4 w/1 w/5
 | 
    
| Assignment | Reassign | 
reassign so/OLD_SHIFT_INDEX wo/OLD_WORKER_INDEX sn/NEW_SHIFT_INDEX wn/NEW_WORKER_INDEX r/NEW_ROLEe.g. reassign so/4 wo/1 sn/1 wn/1 r/Chefreassign s/SHIFT_INDEX w/WORKER_INDEX r/NEW_ROLE e.g. reassign s/1 w/1 r/Cashier
 | 
    
| Data | Action | Format, Example | 
|---|---|---|
| Leave | Take | 
take-leave s/SHIFT_INDEX w/WORKER_INDEX...e.g. take-leave s/2 w/1 w/4
 | 
    
| Leave | Take over range of dates | 
mass-take-leave w/WORKER_INDEX d/START_DAY t/START_TIME d/END_DAY t/END_TIMEe.g. mass-take-leave w/2 d/Sat t/AM d/Tue t/PM
 | 
    
| Leave | Cancel | 
cancel-leave s/SHIFT_INDEX w/WORKER_INDEX...e.g. cancel-leave s/3 w/2 w/3
 | 
    
| Leave | Cancel over a range of dates | 
mass-cancel-leave w/WORKER_INDEX d/START_DAY t/START_TIME d/END_DAY t/END_TIMEe.g. mass-cancel-leave w/3 d/Mon t/AM d/Mon t/PM
 | 
    
| General | Help | help | 
    
| General | Clear | clear | 
    
| General | Exit | exit |