User Guide
SalesPunch is a desktop app for managing contacts, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, SalesPunch can get your contact management tasks done faster than traditional GUI apps.
Salespeople managing client contacts who prefer a CLI
- has a need to manage a significant number of contacts
- prefer desktop apps over other types
- can type fast
- prefers typing to mouse interactions
- is reasonably comfortable using CLI apps
Value proposition: Users that want a faster way to log their sales funnel cycle and keep track of their leads through our CLI app. SalesPunch helps salespersons keep track of all the necessary details and set reminders/alerts, keep track of their leads and prioritise sales tasks
Table of Contents
- Table of Contents
- Quick start
-
Features
- Viewing help :
help
- Adding a person:
add
- Deleting a person :
delete
- Listing all persons :
list
- Sorting all persons :
sort
- Editing a person :
edit
- Assigning lead status:
status
- Finding a contact name:
find
- Finding a contact tag:
findtag
- Finding a contact based on lead status:
findlead
- Finding a contact based on keyword:
findall
- Finding a contact and their list of transactions:
findtxn
- Adding a transaction:
addtxn
- Deleting a transaction record :
deletetxn
- Listing all transaction records :
listtxn
- Editing a transaction record :
edittxn
- Adding a task:
addtask
- Clearing all tasks:
cleartask
- Clearing all entries :
clear
- Exiting the program :
exit
- Saving the data
- Editing the data file
- Viewing help :
- FAQ
- Command summary
Quick start
-
Ensure you have Java
11
or above installed in your Computer. -
Download the latest
salespunch.jar
from here. -
Copy the file to the folder you want to use as the home folder for your SalesPunch.
-
Open a command terminal,
cd
into the folder you put the jar file in, and use thejava -jar salespunch.jar
command to run the application.
A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.
-
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.
Some example commands you can try:-
list
: Lists all contacts. -
add n/Charly Brownly g/female p/93210283 e/charly@example.com c/Mac King l/America o/entrepreneur j/CEO a/Blk 11 Ang Mo Kio Street 74, #11-04
: Adds a contact namedCharly Brownly
to the contact list. -
delete 3
: Deletes the 3rd contact shown in the current contact list. -
clear
: Deletes all contacts from contact list. -
exit
: Exits the app.
-
-
Refer to the Features below for details of each command.
Features
Notes about the command format:
- Words in
UPPER_CASE
are the parameters to be supplied by the user. e.g. inadd n/NAME
,NAME
is a parameter which can be used asadd n/John Doe
.
-
Items in square brackets are optional. e.g.
n/NAME [t/TAG]
can be used asn/John Doe t/friend
or asn/John Doe
. -
Items with
…
after them can be used multiple times including zero times. e.g.[t/TAG …]
can be used ast/friend
,t/friend t/family
etc. -
Parameters can be in any order. e.g. if the command specifies
n/NAME p/PHONE_NUMBER
,p/PHONE_NUMBER n/NAME
is also acceptable. -
If a parameter is expected only once in the command, but you specified it multiple times, only the last occurrence of the parameter will be taken. e.g. if you specify
p/12341234 p/56785678
, onlyp/56785678
will be taken. - Extraneous parameters for commands that do not take in parameters (such as
help
,list
,exit
andclear
) will be ignored. e.g. if the command specifieshelp 123
, it will be interpreted ashelp
.
Limitations for current iteration:
-
SalesPunch can only accept up to 2147483647 contacts and up to 2147483647 transactions. Therefore, commands referencing INDEX can only reach up to 2147483647.
-
Commands do not yet take into account an empty contact list. Some may still function so long they are valid.
Viewing help : help
Shows a message explaining how to access the help page.
Format: help
Adding a person: add
Adds a person to the contact list.
Format: add n/NAME g/GENDER p/PHONE_NUMBER e/EMAIL c/COMPANY l/LOCATION o/OCCUPATION j/JOBTITLE a/ADDRESS [t/TAG …]
Examples:
add n/Amelia Oliveiro g/female p/93210283 e/Amelia@example.com c/Mac King l/America o/entrepreneur j/CEO a/Blk 11 Ang Mo Kio Street 74, #11-04
add n/Amy Bee g/female p/85355255 e/amy@gmail.com c/Tesleh l/Singapore o/engineer j/industrial engineer a/123, Jurong West Ave 6, #08-111 t/friends
-
add n/Bob Builder g/male p/85355255 e/amy@gmail.com c/Tesleh l/Singapore o/engineer j/industrial engineer a/123, Jurong West Ave 6, #08-111 t/friends t/construction t/alumni
Creates contact with multiple tags associated to them
Deleting a person : delete
Deletes the specified person from the contact list.
Note that any transactions tied to the deleted person will not be deleted together.
This could produce transactions with invalid owner. The user should delete related transactions
or edit them with edittxn INDEX to/NEW_OWNER
to assign them to an existing person.
Format: delete INDEX
- Deletes the person at the specified
INDEX
. - The index refers to the index number shown in the displayed contact list.
- The index must be a positive integer 1, 2, 3, …
Examples:
-
list
followed bydelete 2
deletes the 2nd person in the contact list. -
find Betsy
followed bydelete 1
deletes the 1st person in the results of thefind
command.
Listing all persons : list
Shows a list of all persons in the contact list.
Format: list
Sorting all persons : sort
Sorts all persons in the contact list based on an attribute.
Format: sort ATTRIBUTE
ATTRIBUTE: name, gender, phone number, email, company, location, occupation, job title, address, status
- Only one of the attributes needs to be included.
- The contact list will be sorted based on the specified attribute by their value.
Examples:
-
sort name
Sorts all persons alphabetically by name. -
sort occupation
Sorts all persons alphabetically by occupation.
Editing a person : edit
Edits an existing person in the contact list.
Note that the lead status of the person is not available for editing here. Modifying the lead status
should be done via the status
command.
Format: edit INDEX [n/NAME] [g/GENDER] [p/PHONE_NUMBER] [e/EMAIL] [c/COMPANY] [l/LOCATION] [o/OCCUPATION] [j/JOBTITLE] [a/ADDRESS] [t/TAG] …
- Edits the person at the specified required
INDEX
. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, … - At least one of the optional fields must be provided.
- Existing values will be updated to the input values.
- When editing tags, the existing tags of the person will be removed i.e. adding of tags is not cumulative.
- You can remove all the person’s tags by typing
t/
without specifying any tags after it.
Examples:
-
edit 1 p/91234567 e/johndoe@example.com
Edits the phone number and email address of the 1st person to be91234567
andjohndoe@example.com
respectively. -
edit 2 n/Betsy Crower t/
Edits the name of the 2nd person to beBetsy Crower
and clears all existing tags.
-
edit 1 t/friends t/alumni
Edits the name of the 1st person to have the following tagsfriends
andalumni
Assigning lead status: status
Assigns the lead status of a contact. At the same time, saves the timestamp of when the lead status has changed. The user can use this information as a gauge of how long a client has stayed in a certain status.
Format: status INDEX s/STATUS
The 4 types of lead statuses supported are:
Type | Formats (Case-sensitive) | Meaning |
---|---|---|
UNCONTACTED |
Uncontacted or U
|
The user has not gotten in touch with (contacted) the saved person. By default, newly added contacts have this status |
WORKING |
Working or W
|
The person has been contacted. The user is currently nurturing a relationship with the contact with the hopes of making them a qualified lead. |
QUALIFIED |
Qualified or Q
|
The contact is a client that has been nurtured to a ready, buying customer. A contact that has a prospect to buy or is in the sales funnel should go here. |
UNQUALIFIED |
Unqualified or X
|
This status should only be used when it is certain that the customer’s intents are not a match for the user’s sales, and have no prospects of buying at all. |
Examples:
status 1 s/Q
Assigns the status of QUALIFIED to ID 1
in the current list of persons.
status 2 s/Working
Assigns the status of WORKING to ID 2
in the current list of persons.
Finding a contact name: find
Search for a contact based on the NAME.
Format: find NAME
- The find is case-insensitive. e.g.
hans
will matchHans
- The order of the keywords does not matter. e.g.
Hans Bo
will matchBo Hans
- Only the name is found.
- Only full words will be matched e.g.
Han
will not matchHans
- Persons matching at least one keyword will be returned (i.e.
OR
search). e.g.Hans Bo
will returnHans Gruber
,Bo Yang
Examples:
-
find Dewy
will returnDewy Thompson
orMajorie Dewy
Finding a contact tag: findtag
Search for a contact based on their tags.
Format: findtag TAG
- The search is case-insensitive. e.g
friends
will matchFriends
- Only full tags will be matched e.g.
friend
will not matchfriends
- Persons matching at least one tag will be returned (i.e.
OR
search).
e.g.findtag friends
will returnHans Gruber
,Bo Yang
if they are associated with having afriends
tag
Examples:
-
findtag friends
- returns all valid contacts that are associated with tag being searched likefriends
,Dewy Thompson
Finding a contact based on lead status: findlead
Search for a contact based on their leads.
Format: findlead STATUS
The user can use either the long form or short form method to search
Type | Formats (Case-sensitive) | Meaning |
---|---|---|
UNCONTACTED |
Uncontacted or U
|
The user has not gotten in touch with (contacted) the saved person. By default, newly added contacts have this status |
WORKING |
Working or W
|
The person has been contacted. The user is currently nurturing a relationship with the contact with the hopes of making them a qualified lead. |
QUALIFIED |
Qualified or Q
|
The contact is a client that has been nurtured to a ready, buying customer. A contact that has a prospect to buy or is in the sales funnel should go here. |
UNQUALIFIED |
Unqualified or X
|
This status should only be used when it is certain that the customer’s intents are not a match for the user’s sales, and have no prospects of buying at all. |
- The search works for both short form and long form. e.g
U
will matchUncontacted
- Persons matching the tag will be returned
e.g.
findlead U
will returnHans Gruber
who is a contact with a lead status ofUncontacted
Examples:
-
findlead STATUS
- returns all contacts with the associated lead status,Dewy Thompson
orMajorie Dewy
Finding a contact based on keyword: findall
Search for a contact based on matching KEYWORD to any attribute of a Person recorded in the contact list.
Format: findall KEYWORD
*KEYWORD
includes all attributes except TAG
and STATUS
because they have their own separate commands for searching.
*FindAll does not parse through data in tasklist & transactions (For future extensions).
The user can search for any attribute(within the domain mentioned above) and if it matches with any Person, that person/s will be shown as a list of contacts.
- The search is case-insensitive. e.g
u
will matchU
- The search will match with any attribute (within the domain)
- Persons matching the search will be returned:
- Example 1:
findall NAME
:findall John
will return contacts with any attributes that contains the keyword for contacts with the following attributes likeJohn Doe
contained in the NAME attribute andJohn Street
contained in the ADDRESS attribute. - Example 2:
findall ADDRESS
:findall Blk 30
will return contacts with address attributes that contains the keyword likeBlk 16 Hello Drive
andBlk Goodbye Drive
- Applicable for all the following attributes in a person’s details:
NAME GENDER PHONE_NUMBER EMAIL COMPANY LOCATION OCCUPATION JOBTITLE ADDRESS
- Example 1:
Finding a contact and their list of transactions: findtxn
Search for a single contact and all transactions related to this contact. The user must enter an existing user that is in the contact list and must match exactly the name in the contact list.
Format: findtxn NAME
- The search is case-insensitive and exact-match. e.g
John Doe
will matchjohn doe
and all transactions withjohn doe
as the owner in the transaction - The spaces before and after keywords does not matter. e.g. ` Hans Bo ` will match
Hans Bo
e.g.findtxn John Doe
will returnJohn Doe
and all txns with the same owner nameJohn Doe
- Use
list
andlisttxn
to navigated back to default list displays afterfindtxn
.
Examples:
-
findtxn John Doe
- returns the contact with valid and associated transactions with the owner nameJohn Doe
Adding a transaction: addtxn
Adds a transaction record to the transaction list.
Format: addtxn td/DESCRIPTION tv/VALUE ts/STATUS to/OWNER
The 2 types of transaction statuses supported are:
Type | Formats (Case-sensitive) | Meaning |
---|---|---|
OPEN |
Open or O
|
Incomplete transaction |
CLOSED |
Closed or C
|
Completed transaction |
Examples:
addtxn td/Sample Transaction tv/100 ts/Open to/John Doe
Deleting a transaction record : deletetxn
Deletes the specified transaction record from the transaction list.
Format: deletetxn INDEX
- Deletes the transaction record at the specified
INDEX
. - The index refers to the index number shown in the displayed transaction list.
- The index must be a positive integer 1, 2, 3, …
Examples:
-
deletetxn 2
deletes the 2nd transaction record in the transaction list.
Listing all transaction records : listtxn
Shows a list of all transaction records in the transaction list.
Format: listtxn
Editing a transaction record : edittxn
Edits an existing transaction record in the transaction list.
Format: edittxn INDEX [td/DESCRIPTION] [tv/VALUE] [ts/STATUS] [to/OWNER]
- Edits the transaction record at the specified
INDEX
. - The index refers to the index number shown in the displayed transaction list. The index must be a positive integer 1, 2, 3, …
- At least one of the optional fields must be provided.
- Existing values will be updated to the input values.
Examples:
-
edittxn 1 ts/Closed
Edits the transaction status of the 1st transaction record to beClosed
.
Adding a task: addtask
Adds a task to the specific person in the contact list.
Format: addtask INDEX at/TASK_DESCRIPTION
- Adds a task to the person at the specified
INDEX
. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, … - The task added to the person will have the description
TASK_DESCRIPTION
Examples:
-
addtask 1 at/Meet up and finalise sale
Adds a task with descriptionMeet up and finalise sale
to the 1st person. -
addtask 2 at/Contact and arrange to build rapport
Adds a task with descriptionContact and arrange to build rapport
to the 2nd person.
Clearing all tasks: cleartask
Clears all tasks of the specified person based on the INDEX in the contact list.
Format: cleartask INDEX
- Clears all tasks to the person at the specified
INDEX
. The index refers to the INDEX number shown in the displayed contact list. The index must be a positive integer 1, 2, 3, …
Examples:
-
cleartask 1
Clears all tasks fromTaskList
of the 1st person
Clearing all entries : clear
Clears all entries from the contact list.
Format: clear
Exiting the program : exit
Exits and closes the program
Format: exit
Saving the data
SalesPunch contact data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
Editing the data file
SalesPunch data are saved as a JSON file [JAR file location]/data/salespunch.json
. Advanced users are welcome to update data directly by editing that data file.
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 SalesPunch home folder.
Command summary
Action | Format, Examples |
---|---|
Help | help |
Add |
add n/NAME g/GENDER p/PHONE_NUMBER e/EMAIL c/COMPANY l/LOCATION o/OCCUPATION j/JOBTITLE a/ADDRESS [t/TAG…] e.g., add n/Amy Bee g/female p/85355255 e/amy@gmail.com c/Tesleh l/Singapore o/engineer j/industrial engineer a/123, Jurong West Ave 6, #08-111
|
Delete |
delete INDEX e.g., delete 3
|
List | list |
Sort |
sort ATTRIBUTE , where ATTRIBUTE is one of: name, gender, phone number, email, company, location, occupation, job title, address, status e.g., sort name
|
Edit |
edit INDEX [n/NAME] [g/GENDER] [p/PHONE_NUMBER] [e/EMAIL] [c/COMPANY] [i/INDUSTRY] [o/OCCUPATION] [j/JOBTITLE] [a/ADDRESS] [t/TAG] … e.g., edit 2 n/James Lee e/jameslee@example.com
|
Status |
status INDEX_NUMBER s/STATUS e.g., status 1 s/Unqualified
|
AddTxn |
addtxn td/DESCRIPTION tv/VALUE ts/STATUS to/OWNER e.g., addtxn td/DESCRIPTION tv/VALUE ts/STATUS to/OWNER
|
DeleteTxn |
deletetxn INDEX e.g., deletetxn 3
|
ListTxn | listtxn |
EditTxn |
edittxn INDEX [td/DESCRIPTION] [tv/VALUE] [ts/STATUS] [to/OWNER] e.g., edittxn 1 ts/Closed
|
AddTask |
addtask INDEX at/TASK_DESCRIPTION e.g. addtask 1 at/Meet up and finalise sale
|
ClearTask |
cleartask INDEX e.g., cleartask 1
|
Clear | clear |
Exit | exit |