PROJECT: Invités


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:

  1. Aaryam - Mass Email Communication

  2. Sandhya - Events Management

  3. Sarah - Guest List Management

  4. Tze Guang - Attendance Management

  5. 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:

    1. Created Payment and Attendance attributes of a person. Ensured that these attributes can only accept certain values.

    2. 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:

        • Wrote additional tests for existing and new features to increase coverage (Pull requests [273], [266])

        • Did cosmetic tweaks to existing mark command to show updated list (for example if filter a/absent, and then mark is performed, the person who has been marked will no longer be in the list): [283]

      • 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:

        • Reported bugs and suggestions for another team in the cohort (examples: [137], [144])

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/…​]

  • The search is case-insensitive. e.g pa/paid will match pa/PAID.

  • The order of the keywords does not matter. e.g. pa/PAID a/ABSENT will match a/ABSENT pa/PAID.

  • Only payment status, attendance status and tags are searched, depending on prefixes given.

  • Only full words will be matched. e.g. pa/PAID will not match pa/NOTPAID.

  • Guests matching all keywords will be returned (i.e. AND search). e.g. pa/PAID t/GUEST will return a list of people who have paid and are guests.

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

  • The search is case-insensitive. e.g n/hans will match n/Hans

  • The order of the keywords does not matter. e.g. n/Hans n/Bo will match n/Bo n/Hans

  • Only names, phone numbers and email addresses are searched, depending on prefixes given.

  • Only full words will be matched e.g. n/Han will not match n/Hans

  • Guests matching at least one keyword will be returned (i.e. OR search). e.g. n/Hans n/Bo will return Hans Gruber, Bo Yang

Examples:

  • find n/John
    You will be shown a list that contains the entries of john and John Doe

  • find n/Betsy n/Tim n/John
    You will be show a list containing entries of any guest having names Betsy, Tim, or John

  • find n/alex p/92746838 e/johndoe@gmail.com
    You will be show a list containing entries of any guest having the name Alex, phone number 92746838, or email address johndoe@gmail.com

  • find n/david n/edan
    You will be shown a list that contains the entries of any guests having the name david and edan

  • find n/david edan
    You will be shown a list that contains the entries of any guests having the name david but not edan

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:

FilterSequenceDiagram
Figure 1. Filter Sequence Diagram

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:

FindSequenceDiagram
Figure 2. Find Sequence Diagram

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

  1. Filtering a guest

    1. 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.

    2. 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.

    3. Test case: filter pa/paying
      Expected: No guest is listed. Error details shown in the status message. Status bar remains the same.

    4. 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

  1. Finding a guest

    1. 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.

    2. Test case: find e/(Non-matching keyword)
      Expected: No guest is listed. Status bar remains the same.

    3. 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.