Overview
The purpose of this portfolio is to document my role and contributions to the project. |
Invités - An event management system. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.
Responsibility - My task was to handle data filtration. I split this task into two. First, I created a Filter command to handle data filtration for the payment status, attendance status and the tags, as these fields are not unique to any person. Next, I modified the existing Find command to handle names, phone numbers and email addresses, as these are fields used for identification, and the user may want to find a few guests at one go. Rather than use the Filter command, which would yield results one-by-one, the Find command allows you to find a few guests at the same time.
Project Scope - Invités is an application targeted at event managers and planners, that allows you to better organise, cater, and manage the reception for large events such as weddings, school gatherings, orientation camps, etc. Some of the main features include the ability to send mass emails, keep track of payments, as well as the tab keeping of attendance of the guests. To add to this, by employing a standardised format, the application is able to take in Comma Separated Values (CSV) files and import data for a particular event. This removes your need to input all the information manually, as well as subsequently, gives you an alternative if you decide to organise another event using the same guest list.
This will give you an easier time to manage the reception as you will be equipped with tools that will minimise errors in catering, organising, and ordering. Moreover, this application aims to reduce the frustrations for you when planning events and address your needs in a platform that is more user-friendly, personalised, and efficient.
Team:
-
Aaryam - Mass Email Communication
-
Sandhya - Events Management
-
Sarah - Guest List Management
-
Tze Guang - Attendance Management
-
Wei Ming - Data Sharing
Summary of contributions
The purpose of this section is to list the contributions I have made to Invités. |
-
Major enhancement: Added the ability to filter data according to payment status, attendance status and tags
-
What it does: allows the user to filter data based on keywords provided by you, such as payment status, attendance status and/or tags, depending on the prefix used.
-
Justification: This feature improves the product significantly because you can find guests who have yet to pay or are absent on the day of the event. This will help you to be able to find people that fit the conditions you are looking for, without having to traverse the list manually.
-
-
Code contributed: [Sarah Taaher Bonna]
-
Other contributions:
-
Created Payment and Attendance attributes of a person. Ensured that these attributes can only accept certain values.
-
Modified find command which allows the user to find guests with the name(s), phone number(s) and/or email address(es), depending on the prefix used. This modified feature improves the product because you can find a group of people, using their name(s), phone number(s) and/or email address(es) at one go, instead of doing it one-by-one. As such, you are able to find the necessary guests using any available contact details, not just the name.
-
Enhancements to existing features:
-
Documentation:
-
Did cosmetic tweaks to existing contents of the Developer Guide and made important changes to the Use Cases: [144]
-
Did cosmetic tweaks to existing contents of the User Guide: [218], [266], [Commit 0965219]
-
Added in the purpose of Invités in README.adoc: [2]
-
-
Community:
-
-
Contributions to the User Guide
Given below are the sections that I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Filtering the guest list based on specified parameters : filter
Filters the current guest list based on the specified filter parameters. Only filters based on
payment status, attendance status and tags. Keywords should not have spaces or any
special characters.
Values accepted for Payment Status: PAID, NOTPAID, PENDING or N.A.
Values accepted for Attendance Status: PRESENT, ABSENT or N.A.
Format: filter [pa/PAYMENT_STATUS] [a/ATTENDANCE_STATUS]
[t/DIET] [t/GUEST_TYPE] [t/…]
Examples:
-
filter pa/NOTPAID a/PRESENT
You will be shown a list with guests who have yet to pay and are present at your event. -
filter a/Present t/Vegetarian
You will be shown a list with guests who are present and have a vegetarian dietary requirement.
Locating guests by name, phone number or email address: find
Find guests whose names, phone numbers and/or email addresses
contain any of the given keywords.
Format: find n/KEYWORD p/MORE_KEYWORDS e/MORE_KEYWORDS
Example: find n/NAME p/PHONE e/EMAIL
Examples:
-
find n/John
You will be shown a list that contains the entries ofjohn
andJohn Doe
-
find n/Betsy n/Tim n/John
You will be show a list containing entries of any guest having namesBetsy
,Tim
, orJohn
-
find n/alex p/92746838 e/johndoe@gmail.com
You will be show a list containing entries of any guest having the nameAlex
, phone number92746838
, or email addressjohndoe@gmail.com
-
find n/david n/edan
You will be shown a list that contains the entries of any guests having the namedavid
andedan
-
find n/david edan
You will be shown a list that contains the entries of any guests having the namedavid
but notedan
Contributions to the Developer Guide
Given below are the sections that I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
Filter feature
Current Implementation
The filter mechanism is facilitated by VersionedAddressBook
.
Given below is an example usage scenario and how the filter mechanism behaves at each step.
Step 1. The user launches the application for the first time. The VersionedAddressBook
will be initialized with the initial address book state.
Step 2. The user executes filter t/vegan pa/paid
command to obtain a list of people
who are Vegan and have paid.
The filter
command calls Model#getFilteredPersonList()
.
The following sequence diagram shows how the filter operation works:
Design Considerations
Aspect: How filter executes
-
Alternative 1 (current choice): User has to include prefixes when using filter command.
-
Pros: Will use less memory (e.g. for
t/
, just search through the tags field directly). -
Cons: We must ensure that the user includes the prefix of each individual keywords and check that the prefixes are correct.
-
-
Alternative 2: User just enters keywords without prefixes.
-
Pros: Easy to implement.
-
Cons: May have performance issues (e.g. to find guests with a particular tag, the application will have to go through the payment and attendance fields, before going through the tag field).
-
Find feature
Current Implementation
The find mechanism is facilitated by VersionedAddressBook
.
Given below is an example usage scenario and how the find mechanism behaves at each step.
Step 1. The user launches the application for the first time. The VersionedAddressBook
will be initialized with the initial address book state.
Step 2. The user executes find n/Alex p/92743824 e/johndoe@gmail.com
command to obtain
a list of people who have the name Alex
, phone number 92743824
or email address
johndoe@gmail.com
.
The find
command calls Model#getFilteredPersonList()
.
The following sequence diagram shows how the find operation works:
Design Considerations
Aspect: How find executes
-
Alternative 1 (current choice): User has to include prefixes when using find command.
-
Pros: Will use less memory (e.g. for
e/
, just search through the email field directly). -
Cons: We must ensure that the user includes the prefix of each individual keywords and check that the prefixes are correct.
-
-
Alternative 2: User just enters keywords without prefixes.
-
Pros: Easy to implement.
-
Cons: May have performance issues (e.g. to find a guest with a particular email address, the application will have to go through the name and phone number fields, before going through the email field).
-
Filtering a guest
-
Filtering a guest
-
Test case:
filter a/absent
Expected: Details of guests who are absent (i.e. are labelled as "absent" in the Attendance field) will be listed. The number of guests listed will be shown in the status message. -
Test case:
filter a/absent pa/paid t/Vegetarian
Expected: Details of guests who are absent (i.e. are labelled as "absent" in the Attendance field), have paid (i.e. are labelled as "paid" in the Payment field) and have the "Vegetarian" tag will be listed. The number of guests who are listed will be shown in the status message. -
Test case:
filter pa/paying
Expected: No guest is listed. Error details shown in the status message. Status bar remains the same. -
Other incorrect filter commands to try:
filter
,filter prefix/
(where the prefix is any other character besides 'pa', 'a' and 't') ,filter prefix
(where prefix given does not have '/' or has any other special character), etc.
Expected: Similar to previous.
-
Finding a guest
-
Finding a guest
-
Test case:
find n/john
Expected: Details of guests who have 'john' in their names. The number of guests listed will be shown in the status message. -
Test case:
find e/(Non-matching keyword)
Expected: No guest is listed. Status bar remains the same. -
Other incorrect find commands to try:
find
,find prefix/
(where the prefix is any other character besides 'n', 'p' and 'e') ,find prefix
(where prefix given does not have '/' or has any other special character), etc.
Expected: No guest is listed. Error details shown in the status message. Status bar remains the same.
-