By: T16-3 Since: Aug 2018 Licence: MIT

1. Introduction

FoodZoom is a food delivery management platform targeted at food business looking to streamline their delivery process. It is responsive and quick, allowing manager to plan their routes and dispatch orders to delivery man using a Command Line Interface (CLI) while having the benefits of a Graphical User Interface (GUI). The delivery man can also this application to view their delivery routes and increase their efficiency.

2. Quick Start

  1. Ensure you have Java version 9 or later installed in your Computer.

  2. Download the latest foodzoom.jar here.

  3. Copy the file to the folder you want to use as the home folder for your FoodZoom.

  4. Double-click the file to start the app. The GUI should appear in a few seconds (the below screen is after you signup/login).

    Ui
  5. Type the command in the command box and press Enter to execute it.
    e.g. typing /help and pressing Enter will open the help window.

  6. Some example commands you can try:

    • /signup n/John Doe u/johndoe pw/johndoepassword: Sign into the application

    • /order list : lists all orders

    • /order find n/david : finds the order david has ordered

    • /exit : exits the app

  7. Refer to Section 3, “Features” for details of each command.

3. Features

Before starting on the application, read through the below sections. They cover the format to be used for all the commands and the syntax that is to be followed.

Command Format

  • Words in UPPER_CASE are the parameters to be supplied by the user e.g. in /order add n/NAME, NAME is a parameter which can be used as /order add n/John Doe.

  • Items in square brackets are optional e.g n/NAME [p/PHONE] can be used as n/John Doe p/9112 or as n/John Doe.

  • Parameters can be in any order e.g. if the command specifies n/NAME a/ADDRESS, a/ADDRESS n/NAME is also acceptable.

Fields restrictions

NAME

Can only be alphanumeric and spaces are allowed, it should not be blank and be 1 to 64 characters long

PHONE

Phone should only contain numbers, and it should be at least 3 digits long

ADDRESS

Can take any values, and it should not be blank. The last 6 characters should be a valid postal code

FOOD

Should only contain alphanumeric characters and spaces, and it should not be blank

DATETIME

Must conform to the format dd-MM-YYYY h:m:s, where dd is date, MM is month, YYYY is year, h is 24 hour of the day, m is minutes and s is seconds. e.g. 14-10-2018 23:30:00

ORDER_STATUS

Only PENDING, ONGOING or COMPLETED are allowed

USERNAME

Can be alphanumeric and spaces are NOT allowed, it should not be blank and be 3 to 64 characters long.

PASSWORD

Can be alphanumeric, should be at least 6 characters long and spaces are NOT allowed. Not encrypted in current releases.

INDEX

Refers to the index number shown by the order / deliveryman list command & it must be a positive integer 1, 2, 3, …​ and no larger than 2147483647.

Available Commands

That don’t require login

/help

/signup

/login

/logout

/exit

/history

That require login

/order add

/order list

/order edit

/order find

/order select

/order delete

/order clear

/order done

/deliveryman add

/deliveryman list

/deliveryman find

/deliveryman select

/deliveryman delete

/assign

/home

3.2. Sign up for system : /signup [Since v1.1]

Sign up for a new manager account so that the manager can use the application. Once you sign up, you will be automatically logged into the application. Since the managers using the application is working for one stall, they will have access to that stall data and see the same home screen

Format: /signup n/NAME u/USERNAME pw/PASSWORD

Examples:

  • /signup n/John Doe u/johndoe pw/johndoepassword

3.3. Login to system : /login [Since v1.1]

Login into the application so that the manager can use the application. Once you login, you can use the authenticated commands. Since the managers using the application is working for one stall, they will have access to that stall data and see the same home screen

Format: /login u/USERNAME pw/PASSWORD

Examples:

  • /login u/manager pw/password

3.4. Logout from system : /logout [Since v1.3]

Logout from the application.

Format: /logout

3.5. Return to Home Page : /home [Since v1.3]

If any selection is done, allows you to return back to the home page with the dashboard
Format: /home

  • Renders a bar graph which shows the order history (limited to the latest 7 orders by date)

  • Shows a map - the map gives a reasonable estimate for the locations of the pending orders. It is designed to work offline and give you a rough gauge of where your orders are

  • This dashboard dynamically updates itself when the order list is changed

Once the command is executed, you will be greeted with a screen similar to below (statistics shown will vary based on the data you have):

UiHome
Figure 1. Home page for application

The screen consists of a map showing your pending orders and a statistics panel. The size of the placeholder is indicative of how many orders they are in a region. You can observe these components change when carrying out some of the other commands in the application! (try /order find)

This feature allows you to keep track of how many orders you have on certain days and also take note of what is the most common item people have ordered from your stall!

3.6. Adding an order : /order add [Since v1.1]

Allows you to adds a new order to the list of orders.
Format: /order add f/FOOD n/NAME p/PHONE a/ADDRESS dt/DATETIME

There are also some things you need to take note of:

  • Able to add more than 1 food items by specifying more food tags. e.g. f/Roti Prata f/Ice Milo.

  • Address must be a valid address that exists in Singapore to be displayed on the map.

  • If the postal code is longer than 6 digits, much like any other field, only the last 6 digits will be taken into consideration for approximating the location

  • The manager is able to add dates from any time period as long as it is valid.

  • Two orders are considered the same if they have the same name, phone, and date time.

Examples of add order commands (note that the above parameters can be re-ordered):

  • /order add f/Roti Prata n/John Smith p/12345678 a/block 123, Clementi Drive, #01-01 610123 dt/26-12-2018 10:10:54

  • /order add a/block 55 Computing Drive 117417 n/Harry f/Tissue Prata f/Nasi Briyani p/81889111 dt/14-12-2018 14:10:54

3.7. Listing all orders : /order list [Since v1.1]

Shows a list of all orders in chronological order
Format: /order list

3.8. Editing an order : /order edit [Since v1.2]

Edits an existing order in the list of orders.
Format: /order edit INDEX [f/FOOD] [n/NAME] [p/PHONE] [a/ADDRESS] [dt/DATETIME]

  • Edits the order at the specified INDEX.

  • At least one of the optional fields must be provided.

  • Existing values will be updated to the input values.

  • When a parameter is specified, e.g. f/, n/, empty fields are not allowed. Value must be specified.

  • Orders that are Ongoing or Completed cannot be edited.

Examples:

  • /order list
    /order edit 1 p/91234567 n/Jonathan
    Edits the phone number and name of the 1st order to be 91234567 and Jonathan respectively.

  • /order list
    /order edit 2 f/Maggi Goreng f/Ice Milo
    Edits the food of the 2nd order to be Maggi Goreng, Ice Milo.

3.9. Finding orders : /order find [Since v1.2]

Find any order/s with any given order fields.
Format: /order find [n/NAME] [p/PHONE] [a/ADDRESS] [f/FOOD] [dt/DATETIME] [st/ORDER_STATUS]

  • All fields are optional. However, at least one field must be specified.

  • Empty value after any fields are not allowed. e.g. n/

  • The search is case insensitive. e.g tom will match Tom

  • Partial match is allowed for name, phone, food and address. e.g. alex will match alex lim and al will match alex lim

  • When more than 1 fields are given, the find will do an and on all fields. e.g. n/alex p/1234, will be n == 'alex' AND p == 1234

  • When the same fields are given, it will take the last field, except for date search. For date search refer below. e.g. n/alex n/tom, Only n/tom is taken

  • Phone Find

    • Multiple phone search is allow when phone numbers are separated by spaces. e.g. p/1234 9111 will match phones with 1234 and 9111

  • Date Find

    • To find for orders from a specific date, use 1 date field. e.g dt/01-10-2018 10:00:00 will return order/s on that date.

    • To find for orders with a date range, use 2 or more date fields. e.g. dt/01-10-2018 10:00:00 dt/03-10-2018 10:00:00 will return order/s within the 2 dates. When more than 2 date fields are given, it will take the smallest and the biggest datetime

Examples:

  • /order find n/john
    Returns john and John Doe

  • /order find p/81231233 a/block 123, Clementi Drive, #01-01
    Returns orders with phone number of 81231233 and address of block 123, Clementi Drive, #01-01

  • /order find dt/01-10-2018 10:00:00 dt/03-10-2018 10:00:00
    Returns for orders that are within the datetime 01-10-2018 10:00:00 and 03-10-2018 10:00:00

3.10. Deleting an order : /order delete [Since v1.1]

Deletes the specified order from the list of order.
Format: /order delete INDEX

  • Deletes an order at the specified INDEX.

  • Orders that are Ongoing cannot be deleted.

Examples:

  • /order list
    /order delete 2
    Deletes the 2nd order in the list of orders.

  • /order find n/tom
    /order delete 1
    Deletes the 1st order in the results of the find command.

3.11. Selecting an order : /order select [Since v1.1]

Selects the specified order from the list of order.
Format: /order select INDEX

  • Select an order at the specified INDEX.

  • Renders a new view for the select order - use /home to return the original view

Examples:

  • /order list
    /order select 2
    Selects the 2nd order in the list of orders.

  • /order find n/david
    /order select 1
    Selects the 1st order in the results of the find command.

3.12. Clearing all order entries : /order clear [Since v1.1]

Clears all entries from the list of orders.
Format: /order clear

  • If there is an order already assigned to a deliveryman, order list cannot be cleared.

3.13. Adding a delivery man : /deliveryman add [Since v1.2]

Allows you to add a delivery man to the list of delivery men
Format: /deliveryman add n/NAME

Examples:

  • /deliveryman add n/John Smith

3.14. Listing all delivery men : /deliveryman list [Since v1.2]

Lets you see the list of all delivery men in that were added for chronological order
Format: /deliveryman list

3.15. Editing a delivery man : /deliveryman edit [Coming in v2.0]

Edits an existing delivery man in the list of delivery men.
Format: /deliveryman edit INDEX n/NAME

  • Edits the delivery man at the specified INDEX.

  • At least one of the optional fields must be provided.

  • Existing values will be updated to the input values.

  • When a parameter is specified, e.g. n/, empty fields are not allowed. A value must be specified.

Examples:

  • /deliveryman list
    /deliveryman edit 1 n/John Doe
    Edits the name of the 1st delivery man to be John Doe.

3.16. Finding delivery man by name : /deliveryman find [Since v1.2]

Find delivery men whose name contain in the given parameter.
Format: /deliveryman find n/NAME

  • The search is case insensitive. e.g tom will match Tom

  • When more than one name field is given, it will only consider the last name field. e.g. n/alex n/tom, only n/tom will be considered

  • Partial match is allowed e.g. tom will match tommy

Examples:

  • /deliveryman find n/John Smith
    Returns all delivery men with the names John e.g. John Smith and John Doe

3.17. Deleting a delivery man : /deliveryman delete [Since v1.2]

Allows you to delete the specified delivery man from the list of delivery men
Format: /deliveryman delete INDEX

  • Deletes a delivery man at the specified INDEX.

  • Deliveryman that already have orders assigned cannot be deleted.

Examples:

  • /deliveryman list
    /deliveryman delete 2
    Deletes the 2nd delivery man in the list of delivery men.

  • /deliveryman find n/tom
    /deliveryman delete 1
    Deletes the 1st delivery man in the results of the find command.

3.18. Selecting a deliveryman : /deliveryman select [Since v1.4]

Allows you to select the specified deliveryman from the list of deliverymen.
Format: /deliveryman select INDEX

  • Select an deliveryman at the specified INDEX.

  • Renders a new view for the selected deliveryman - use /home to return the original view

Examples:

  • /deliveryman list
    /deliveryman select 2
    Selects the 2nd deliveryman in the list of deliverymen.

  • /deliveryman find n/david
    /deliveryman select 1
    Selects the 1st deliveryman in the results of the find command.

3.19. Clearing all delivery men entries : /deliveryman clear [Coming in v2.0]

Allows you to clear all entries from the list of delivery men.
Format: /deliveryman clear

3.20. Assign orders to a delivery man : /assign [Since v1.3]

Lets you assign multiple orders to a delivery man
Format: /assign d/DELIVERYMAN_INDEX o/ORDER_INDEX

  • Assigns orders at the specific ORDER_INDEX to the delivery man at the DELIVERYMAN_INDEX

  • There must be at least 1 order and 1 delivery man.

  • Add more than 1 orders by specifying more tags. e.g. o/1 o/2 o/3.

  • Orders that are Ongoing or Completed cannot be reassigned.

  • No more than 5 can be assigned to a deliveryman at one time.

Examples:

  • /order list
    /deliveryman list
    /assign d/2 o/1 o/2
    Assigns order number 1 and 2 to delivery man number 2.

Before the command is executed, the order status is Pending and the delivery man is available:

assign before
Figure 2. Before /assign command is executed

After the command is executed, the order status changes to Ongoing and the delivery man has 2 assigned orders:

assign after
Figure 3. After /assign command is executed successfully

3.21. Mark an order as completed : /order done [Since v1.4]

Mark an order as completed. Format: /order done ORDER_INDEX

  • Mark ORDER_INDEX as completed.

  • The index refers to the index number shown in the orders list.

  • The index must be a positive integer 1, 2, 3, …​ and must be within the number of displayed orders.

  • There must be only 1 order index.

  • Only ongoing orders can be marked as completed.

Examples:

  • /order list
    /deliveryman list
    /assign d/2 o/1
    /order done 1 Mark order number 1 as completed.

After you mark an order done:

orderdone
Figure 4. Order status changed to Completed after the order is marked as done

3.22. Listing entered commands : /history [Since v1.1]

Lists all the commands that you have entered in reverse chronological order.
Format: /history

Pressing the and arrows will display the previous and next input respectively in the command box.

3.23. Exiting the program : /exit [Since v1.1]

Exits the program.
Format: /exit

3.24. Creating a new route: /route create [Deprecated since v1.2.1]

Creates a route with a set of orders
Format: /route create o/ORDER_ID

  • All fields need to have at least a value. e.g. o/ is not allowed.

  • Able to add more than 1 orders by specifying more tags. e.g. o/1 o/2 o/3.

Examples:

  • /route create o/1 o/3

3.25. Saving the data

FoodZoom data are saved in the hard disk automatically after any command that changes the data.
There is no need to save manually.

3.27. Login to system : /login (Deliveryman Command) [Coming in v2.0]

Format: /login u/USERNAME pw/PASSWORD

Examples:

  • /login u/deliveryman pw/password

3.29. Listing assigned orders : /order list (Deliveryman Command) [Coming in v2.0]

List details of assigned order/s
Format: /order list

4. FAQ

Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous Address Book folder.

5. Command Summary

  • Sign Up : /signup n/NAME u/USERNAME pw/PASSWORD
    e.g. /signup n/John Doe u/johndoe pw/johndoepassword

  • Login : /login u/USERNAME pw/PASSWORD
    e.g. /login u/manager pw/password

  • Logout : /logout

  • Return to Home : /home

  • Add order : /order add f/FOOD n/NAME p/PHONE a/ADDRESS dt/DATETIME
    e.g. /order add f/Roti Prata n/James Ho p/22224444 a/block 123, Clementi Rd, 1234665 dt/14-12-2018 10:18:00

  • Listing orders : /order list

  • Edit order : /order edit INDEX [f/FOOD] [n/NAME] [p/PHONE] [a/ADDRESS] [dt/DATETIME]
    e.g. /order edit 2 n/James Lee

  • Find order : /order find [n/NAME] [p/PHONE] [a/ADDRESS] [f/FOOD] [dt/DATETIME] [st/ORDER_STATUS]
    e.g. /order find n/James Jake

  • Delete order : /order delete INDEX
    e.g. /order delete 3

  • Select order : /order select INDEX
    e.g. /order select 3

  • Clear order : /order clear

  • Add delivery man : /deliveryman add n/NAME
    e.g. /deliveryman add n/James Ho

  • Listing delivery men : /deliveryman list

  • Edit delivery man (Coming in v2.0) : /deliveryman edit INDEX n/NAME
    e.g. /deliveryman edit 2 n/James Lee

  • Find delivery man : /deliveryman find n/NAME
    e.g. /deliveryman find n/James Jake

  • Delete delivery man : /deliveryman delete INDEX
    e.g. /deliveryman delete 3

  • Select delivery man : /deliveryman select INDEX
    e.g. /deliveryman select 1

  • Clear delivery men (Coming in v2.0) : /deliveryman clear

  • Assign orders to a delivery man : /assign d/DELIVERYMAN_INDEX o/ORDER_INDEX
    e.g. /assign d/1 o/1 o/3

  • Mark an order as completed : /order done ORDER_INDEX
    e.g. /order done 1

  • Help : /help

  • History : /history

  • Exit the program : /exit

  • Create a route [DEPRECATED] : /route create o/ORDER_INDEX
    e.g. /route create o/1 o/3

  • Login (Deliveryman) (Coming in v2.0) : /login u/USERNAME pw/PASSWORD
    e.g. /login u/deliveryman pw/password

  • Logout (Deliveryman) (Coming in v2.0) : /logout

  • View delivery route (Deliveryman) (Coming in v2.0) : /route list

  • View assigned orders (Deliveryman) (Coming in v2.0) : /order list

  • Help (Deliveryman) (Coming in v2.0) : /help

  • Exit the program (Deliveryman) (Coming in v2.0) : /exit