Overview
PREFACE |
This section features the role and contributions I had over the course of this project |
Invités is a desktop application used by people who manage and plan events to streamline their processes and better manage
the events that they are handling.
The user interacts with it mainly using a Command Line Interface (CLI), and it has a Graphical User Interface (GUI) created with the JavaFX library.
Responsibility - In this project, I was assigned the task of creating an easy to use system to manage the attendance within the application.
To implement a feature like that in this application, I would need a method to uniquely identify each guest in the guest list. This is necessary as having identifiers that can give more than one result will increase the burden of the event planner as they will have to choose which entry would be modified, when this application is supposed to be helping them. Identifying the right person quickly in an event is essential for running the event smoothly. Also considering the fact that names, phone numbers, emails cannot be considered unique in a setting such as a public event, creating a unique ID (UID) was needed. After creating the UID, the process of marking attendance is made easier as each UID represents one person in the guest list.
Project scope - Invités is an event management system that provides an intuitive platform for event planners to better organise and manage the reception during small or large events such as school orientation camps, committee events or more formal occasions such as weddings. The main features that streamline the processes of the event planner is the ability to send mass emails to attendees, keep track of payments, as well as attendance tracking during the event itself. If the event planner used other applications to store his data, they can easily import their data over from CSV files that can be generated from Microsoft Excel.
Team
The list below shows all our team members and what we have contributed to the application Invités:
Names |
Major Feature |
Aaryam Srivastava |
Mass Email Communication |
Sandhya Gopakumar |
Events Management |
Sarah Taaher Bonna |
Guest List Management |
Tan Tze Guang |
Attendance Management |
Tan Wei Ming |
Data Sharing |
Summary of contributions
PREFACE |
This section is a summary of my contributions to the project. It showcases my ability to work on a software project with a team of people |
-
Major Feature: added the function to mark attendance of the attendees in the Guest list
-
What it does: This function allows the person planning an event to keep track of the number of attendees whom have arrived at the event by marking them as present or absent during the event itself.
-
Justification: This feature is necessary in the implementation of our guest list as it is a core feature that gives the event planner peace of mind as it is a tool for them to ensure that the event is run smoothly.
-
Highlights: This feature is a core feature that required creating the Unique ID for each guest, else it would have to be more complex to handle identification mediums that could potentially identify more than one person at a time.
-
-
Sub feature: added the function to generate Unique ID (UID) for attendees
-
What it does: This function allows the event planner to not have to think of a large number of UID for guests of the event.
-
Justification: This feature is necessary in the implementation of our guest list as it streamlines the identification of each guest especially for the receptionists for the event. It provides a unique identification to each guest which allows our program to pick out the right person without needing to handle people whom have the same name or same phone numbers.
-
Highlights: This enhancement affects existing commands and commands to be added in future. The implementation too was challenging as it required changes to existing commands.
-
-
Code contributed: [Functional code]
-
Other contributions:
-
Documentation:
-
Enhancements to existing features:
-
Added generation of UID into the
add_guestcommand
-
-
Community:
-
Tools:
-
Integrated a Github plugin (CircleCI) to my personal forked repository
-
-
Contributions to the User Guide
PREFACE |
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation which targets end-users. |
The implementation of the mark and unmark commands are found in the Logic component of the application.
|
Marking a guest as present : mark
Marks a guest as present using a unique ID (UID) that was assigned to them upon adding them into the guest list.
This will also update the attendance field associated with the guest to PRESENT.
Format: mark [UID]
UID does not use the u/ prefix.UID only accepts a string of numbers alphanumeric characters between 5 to 20 characters inclusive,
other characters will trigger an invalid command format error.
|
Examples:
-
mark 543654You will set the guest with UID543654asPRESENT. -
mark A345654MYou will set the guest with UIDA345654MasPRESENT. -
mark ALPHAYou will set the guest with UIDALPHAasPRESENT.
Figure 3 - User interface after Mark Command : Successful execution of MarkCommand
Marking a guest as absent : unmark
Marks a guest as absent using a unique ID (UID) that was assigned to them upon adding them into the guest list.
This will also update the attendance field associated with the guest to ABSENT.
Format: mark [UID]
UID does not use the u/ prefix.UID only accepts a string of numbers alphanumeric characters between 5 to 20 characters inclusive,
other characters will trigger an invalid command format error.
|
Examples:
-
unmark 543654You will set the guest with UID543654asABSENT. -
mark A345654MYou will set the guest with UIDA345654MasABSENT. -
mark ALPHAYou will set the guest with UIDALPHAasABSENT.
Figure 4 - User interface after Unmark Command : Successful execution of UnmarkCommand
Starting mass attendance marking : start_marking - Coming in v2.0
| This feature has not been implemented yet. Our team plans to implement this feature in an upcoming version, v2.0. |
Start the mass attendance marking mode. Allows you to mark attendance without using
the mark prefix. This command will allow you to continuously mark the attendance of the attendees by keying in their Unique ID (UID)
into the command line interface
Format: start_marking + [UID]…
|
You are unable to use other commands once this mode is active. You will need to use the stop_marking command to deactivate this mode to use other commands
|
Examples:
-
start_marking+00001+708944+928372+00003…
You will mark the guests with UID of00001,708944,928372,00003asPRESENT.
Stopping mass attendance marking : stop_marking - Coming in v2.0
| This feature has not been implemented yet. Our team plans to implement this feature in an upcoming version, v2.0. |
Stops the mass attendance marking mode. Deactivates the start_marking mode to enable usage of other commands in the program
Format: stop_marking
Examples:
-
start_marking+00001+stop_marking
Initiatestart_markingmark the person with UID00001then exit the mode withstop_marking.
Contributions to the Developer Guide
PREFACE |
Given below are sections that I have contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
The implementation of the mark and unmark commands are found in the Logic component of the application.
|
Mark/Unmark Command
The mark/unmark mechanism is facilitated by Model.
Given below is an example usage scenario and how the mark/unmark command executes 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 and the currentStatePointer pointing to that single address book state.
Step 2. The user executes the command import guestlist.csv to import a list of guest and add them to the current state of the AddressBook.
Alternatively, the user can execute the command add_guest n/John Doe p/98765432 e/johnd@gmail.com pa/PAID a/ABSENT u/00001 t/NORMAL to create an instance of one guest and add them to the current state of AddressBook.
|
Step 3. The user will execute the command mark 00001 to set the attendance of the Person to PRESENT.
Step 4. An instance of getPersonList is retrieved from the model using MODEL#getAddressBook#getPersonList. A linear search is then executed on the getPersonList to find a Person with the same Unique ID (UID) as 00001.
If there is no matching UID found, a COMMANDEXCEPTION will be thrown to indicate nobody in the list has the phone number.
If there is more than one instance of the same UID, a COMMANDEXCEPTION will be thrown to indicate that there are more than one instance of the same UID. In this case, edit_guest will not work. The user has to delete the entry and add_guest for the deleted entry.
|
Step 5. After retrieving the information from the discovered Person, another Person is created with the same fields with the exception of the attendance field being changed from ABSENT to PRESENT.
Step 6. Finally, the entry is updated using MODEL#updatePerson to transfer the new information into the Model before commitAddressBook is executed to save the state of the AddressBook.
The following sequence diagram shows how the mark operation works:
The following sequence diagram shows how the ummark operation works:
Design Considerations
Aspect: How mark/unmark executes
-
Alternative 1 (current choice): access the
PersonListmodel to execute marking of attendance.-
Pros: Able to mark the attendance of anybody within the list even when it is filtered. Prevents the bug of a person filtering the list to only show a single instance of the multiple similar UID to mark their attendance.
-
Cons: Some changes might be hard to detect when displaying a filtered list.
-
-
Alternative 2: access the
filteredPersonListmodel to execute the marking of attendance.-
Pros: Able to work with a smaller set of people in the list. Changes made are immediately observable.
-
Cons: Introduces bugs such as avoiding the similar UID check within the current instance of the guest list. If the filtered list does not immediately have the UID that needs to be used, the user has to call
listcommand first. Increasing the chance of human error in the system.
-
The implementation of the generate Unique ID (UID) function is found in the Logic component of the application within the add_guest command.
|
Extension made to add_guest: Generate Unique ID (UID) on creation of an entry into the list
This feature is facilitated by the usage of the Model.
Given below is an example of the execution of the added functionality of the add_guest command.
Step 1. The user launches the application for the first time. The VersionedAddressBook will be initialized with the initial address book state and the currentStatePointer pointing to that single address book state.
Step 2. The user executes the add_guest command with the following non-null fields: add_guest n/John Doe p/98765432 e/johnd@gmail.com pa/PAID a/ABSENT u/00000 t/NORMAL.
Step 3. The addCommandParser extracts the relevant information from the command and returns a Person model that was built with the given arguments.
Step 4. The add_guest.execute function receives the generated Person model and checks for duplicates of the same Person as well as duplicates of the same UID in the VersionedAddressBook.
If the checks fail, COMMANDEXCEPTION will be thrown to indicate the existence of more than one of the same UID or Person
|
Step 5. The function will test the equality between the UID given in the generated Person and the DEFAULT_TO_GENERATE_UID which is u/00000. From here the program will do one of 2 different things.
Step 6a. If the UID given is not the same as DEFAULT_TO_GENERATE_UID:
The program will treat this as a user defined UID and add the Person into the Model without generating a new UID.
Step 6b. Alternatively, If the UID input in step 2 is the same as DEFAULT_TO_GENERATE_UID:
The program will create a new Person model with the same arguments with the exception of UID. The UID is then generated randomly in the generateUid() function.
Another check is done to ensure that the UID does not already exist in the VersionedAddressBook.
This is done in a loop to ensure the UID is unique before adding the Person into the Model by executing addPerson().
Step 7. After adding the Person into the Model, the program commits the changes by executing commitAddressBook to save the state of the AddressBook..
The following sequence diagram shows how the add_guest command works:
Design Considerations
Aspect: Whether to only generate UID or to allow the user to define UID
-
Alternative 1 (current choice): give the user the freedom to choose between defining their own
UIDor letting the program generate one itself.-
Pros: Able to write tests for the command that will not fail. A company or event may already be using some sort of unique identification, this can be used by the event planner to uniquely identify attendees. If there is none, the user can just let the program generate one for them.
-
Cons: Increased code complexity
-
-
Alternative 2: only let the user define the
UIDfor all attendees of the event.-
Pros: Decreased code complexity
-
Cons: User will face great difficulty in creating UID for a large group of people if there is no unique identifier available for the attendees already.
-
-
Alternative 3: only generate the
UIDfor all the attendees in the list, user input for the UID is not allowed.-
Pros: Decreased code complexity
-
Cons: Unable to write meaningful tests if the the actual output is going to be random. Users may already have a way to uniquely identify the attendees to the event but the event planner cannot make use of that method.
-
Generation of UID details in add_guest command
-
Setting the UID for each guest in the guest list.
-
Test case:
add_guest n/John p/98765432 e/f@gmail.com pa/PAID a/ABSENT u/00000 t/NORMAL t/NoShrimp t/NORMAL
Expected: As the field for the UID is set to00000, the program will generate a random 6 digit UID for the user. -
Test case:
add_guest n/Doe p/98725432 e/g@gmail.com pa/PAID a/ABSENT u/00001 t/NORMAL t/NoShrimp t/NORMAL
Expected: As the field for the UID is set to00001, the program will treat this is a User defined UID and add the person with the UID set to00001. -
Test case:
add_guest n/Jon p/98765422 e/d@gmail.com pa/PAID a/PRESENT u/0000 t/NORMAL t/NoShrimp t/NORMAL
Expected: As the field for the UID is set to0000which is an invalid input as the UID has to be at least 5 characters, the program will display an error message. -
Test case:
add_guest n/Do p/98765232 e/g@gmail.com pa/PAID a/PRESENT u/000000000000000000001 t/NORMAL t/NoShrimp t/NORMAL
ExpectedL As the field for the UID is set to000000000000000000001which has 21 characters which is an invalid input as the UID cannot be more than 20 characters, the program will display an error message.
-
Marking Attendance details
-
Marking attendance using the Unique ID (UID) to set the attendance to
PRESENTwith themarkcommand.-
Prerequisites: The guest list must be populated with guests. At least one guest has the UID
00001. -
Test case:
mark 00001
Expected: The person whose UID is00001will have the attendance field marked asPRESENT. -
Test case:
mark [UID not in the guest list]
Expected: An error will show that there is no such person in the guest list. -
Test case:
mark 0001
Expected: The UID is in the wrong format and will show an error message. -
Test case:
mark 0101010101010101010101010101
Expected: the UID is in the wrong format and will show an error message.
-
-
Marking attendance using the Unique ID (UID) to set the attendance to
ABSENTwith theunmarkcommand.-
Prerequisites: The guest list must be populated with guests. At least one guest has the UID
00001. -
Test case:
unmark 00001
Expected: The person whose UID is00001will have the attendance field marked asABSENT. -
Other test cases: similar to
markcommand as shown above
-