diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index ba5dca1c9d8..18a174c35b5 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -3,7 +3,7 @@ layout: page title: Developer Guide --- * Table of Contents -{:toc} + {:toc} -------------------------------------------------------------------------------------------------------------------- @@ -181,8 +181,8 @@ The following activity diagram summarizes what happens when a user executes a ne * Cons: Command input may be too long and less user-friendly. * **Alternative 2**: Allow for optional parameters with default values, with the tutee's name and phone being the compulsory ones. - * Pros: More user-friendly, command will not be too lengthy. - * Cons: Harder to implement. + * Pros: More user-friendly, command will not be too lengthy. + * Cons: Harder to implement. ### List feature @@ -211,15 +211,15 @@ the `FilteredPersonList` to only display Persons whose `isPaid` field is false. **Aspect: How to implement `ListByDayCommand` and `ListUnPaidCommand`:** * **Alternative 1 (current choice):** Extend the `ListCommand` class. - * Pros: Greater use of OOP. - * Cons: Harder to implement. + * Pros: Greater use of OOP. + * Cons: Harder to implement. * **Alternative 2:** Individual command class without extending `ListCommand`. - * Pros: Easier to implement. - * Cons: Less abstraction. + * Pros: Easier to implement. + * Cons: Less abstraction. ### Find feature -The `FindCommand` extends the `Command` class. It allows the user to find for tutees by specifying their names and/or +The `FindCommand` extends the `Command` class. It allows the user to find for tutees by specifying their names and/or subject using their prefixes. Both parameters are optional, but at least one of them must be specified for the `find` command to work properly. @@ -243,7 +243,7 @@ The following sequence diagram shows how the edit command works. ### Edit feature The `EditCommand` extends the `Command` class. It allows the user to edit fields of the tutee by specifying the index -of the tutee. The command contains checks to prevent any duplicate `Person` object (i.e. same name and phone number) +of the tutee. The command contains checks to prevent any duplicate `Person` object (i.e. same name and phone number) as well as clashes in schedules. If it passes these checks, the person is edited successfully. `EditCommand` takes in the following fields: @@ -271,23 +271,11 @@ The following activity diagram summarizes what happens when a user executes an e * **Alternative 1 (current choice):** User specify which fields to edit by their prefixes. * Pros: User can edit the fields that require changes by specifying their prefix. * Cons: Command input may be too long and less user-friendly. -* **Alternative 2:** Users cannot edit tutees that are already added, and can only do delete and re-adding -of tutees whenever changes are necessary. +* **Alternative 2:** Users cannot edit tutees that are already added, and can only do delete and re-adding + of tutees whenever changes are necessary. * Pros: Less prone to bugs, and is simpler for developers to implement. * Cons: Not user-friendly and takes multiple steps for the user. -#### Design considerations: - -**Aspect: How to implement `ListByDayCommand` and `ListUnPaidCommand`:** - -* **Alternative 1 (current choice):** Extend the `ListCommand` class. - * Pros: Greater use of OOP. - * Cons: Harder to implement. - -* **Alternative 2:** Individual command class without extending `ListCommand`. - * Pros: Easier to implement. - * Cons: Less abstraction. - ### Find Free Time feature The `freeTime` Command extends the `Command` class. @@ -319,21 +307,21 @@ The following activity diagram summarizes what happens when a user executes a `f * **Alternative 1 (current choice):** The command first finds timeslots when the user is busy on that _Day_ by looking at the tutees' schedules inside the `UniquePersonList`. The TimeSlot Class finds free time based on the list of timeslots when the user is busy, and then returns a list of timeslots where the user is free. (Each timeslot is between _Begin_ and _End_, -and is at least _Duration_ long) - * Pros: Command is short and simple to use. - * Cons: During the first round of user-testing, some new users were confused on how to use the command. + and is at least _Duration_ long) + * Pros: Command is short and simple to use. + * Cons: During the first round of user-testing, some new users were confused on how to use the command. -### Calculate total revenue for the month +### Calculate monthly revenue The `RevenueCommand` extends the `command class`. The command first gets a list containing all tutees. -The total revenue monthly can be calculated now by iterating through the list and calling `Person#getMonthlyFee`.
+The total monthly revenue can be calculated now by iterating through the list and calling `Person#getMonthlyFee`.
-The total monthly revenue is calculated as such:
+The total monthly revenue is calculated as such:
*Total Monthly Revenue* = Sum of every tutee's `monthlyFee` -The following sequence diagram shows how the total revenue command works: +The following sequence diagram shows how the `RevenueCommand` works: ![RevenueSequenceDiagram.png](images/RevenueSequenceDiagram.png) #### Design Considerations @@ -416,13 +404,13 @@ The following activity diagram summarizes what happens when a user executes a ne **Aspect: How undo & redo executes** * **Alternative 1 (current choice):** Saves the entire tutee list. - * Pros: Easy to implement. - * Cons: May have performance issues in terms of memory usage. + * Pros: Easy to implement. + * Cons: May have performance issues in terms of memory usage. * **Alternative 2:** Individual command knows how to undo/redo by itself. - * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted). - * Cons: We must ensure that the implementation of each individual command are correct. + * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted). + * Cons: We must ensure that the implementation of each individual command are correct. ### Mark paid/unpaid features The proposed mark paid/check paid mechanism can check whether the person has paid or not by implementing a new boolean field 'paid' in the person object, it implements the following operations: @@ -485,7 +473,7 @@ The following sequence diagram shows how unpaidAll command works: **Target user profile**: Private tutors not affiliated to any tuition organisations * has a need to manage multiple tutees -* has a need for managing personal tutoring schedule +* has a need for managing personal tutoring schedule * prefer desktop apps over other types * can type fast * prefers typing to mouse interactions @@ -526,17 +514,17 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli 1. User requests to list all tutees. 2. System shows all tutees. 3. System displays the success message. - + Use case ends. **Extensions** - 2a. The list of tutees is empty. - 2a1. System informs the user that the list is empty. - - Use case ends. -
-
+ + Use case ends. +
+
**Use case: UC02 - List tutees whose lessons are on a specified day** @@ -577,20 +565,20 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli - 1b1. System informs user of duplicate tutees. Use case resumes at 1. - + - 1c. User inputs a clash in schedule. - 1c1. System informs user of the clash in schedules. Use case resumes at 1. - + - 1d. User inputs begin time which is greater than the end time. - - 1d1. System informs that begin time must be smaller than the end time. + - 1d1. System informs that begin time must be smaller than the end time. - Use case resumes at 1. + Use case resumes at 1. + +
+
-
-
- **Use case: UC04 - Delete a tutee** **MSS** @@ -608,7 +596,7 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli - 2a1. System informs that user does not exist.

- + **Use case: UC05 - Edit a tutee** **MSS** @@ -621,28 +609,28 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli Use case ends. **Extensions** - + - 2a. The schedule of the edited tutee clashes with an existing schedule. - - 2a1. System informs that there is a clash in schedules. + - 2a1. System informs that there is a clash in schedules. + + Use case resumes at 2. - Use case resumes at 2. - - 2b. The edited begin time is after than the original end time. - - 2b1. System informs that begin time must be smaller than the end time. + - 2b1. System informs that begin time must be smaller than the end time. + + Use case resumes at 2. - Use case resumes at 2. - - 2c. The edited end time is before the original begin time. - - System informs that begin time must be smaller than the end time. + - System informs that begin time must be smaller than the end time. + + Use case resumes at 2. - Use case resumes at 2. - - 2d. The edited begin time is after the edited begin time. - - 2d1. System informs that begin time must be smaller than the end time. - - Use case resumes at 2. -
-
+ - 2d1. System informs that begin time must be smaller than the end time. + + Use case resumes at 2. +
+
**Use case: UC06 - Find a tutee** @@ -655,32 +643,17 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli **Extensions** - 2a. The user inputs more than one word for name field. - - 2a1. System informs that name can only take one word. - - Use case resumes at 2. - -- 2b. The user inputs more than one word for subject field. - - 2b1. System informs that subject can only take one word. + - 2a1. System informs that name can only take one word. - Use case resumes at 2. - -- 2c. The user inputs more than one word for name field and one word for subject fields. - - 2c1. System informs that name can only take one word. + Use case resumes at 2. - Use case resumes at 2. - -- 2d. The user inputs one word for name field and more than one word for subject field. - - 2d1. System informs that subject can only take one word. +- 2b. The user inputs more than one word for subject field. + - 2b1. System informs that subject can only take one word. - Use case resumes at 2. - -- 2e. The user inputs more than one word for both name and subject fields. - - 2e1. System informs that name can only take one word. + Use case resumes at 2. +
+
- Use case resumes at 2. -
-
- **Use case: UC07 - Mark a tutee as paid** **MSS** @@ -743,8 +716,8 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli * 1a1. System informs user that there is nothing to redo. Use case ends. -
-
+
+
**Use case: UC11 - Finding free time** @@ -754,10 +727,11 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli **Extensions** - 2a. The user does not have any free slots available. +<<<<<<< HEAD - 2a1. System informs user that there is no available timeslots.

- + **Use case: UC12 - Get monthly revenue** **MSS** @@ -768,8 +742,8 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli Use case ends. *{More to be added}* -
-
+
+
### Non-Functional Requirements @@ -795,7 +769,7 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli * Timeslot: An interval of time from HH:MM to HH:MM * Prefix: An abbreviation for the name of the parameter. Prefix should be entered before the actual parameter in a command and always ends with a slash (/). * MSS: Main success scenario -
+
-------------------------------------------------------------------------------------------------------------------- ## **Appendix: Instructions for manual testing** @@ -811,15 +785,15 @@ testers are expected to do more *exploratory* testing. 1. Initial launch - 1. Download the jar file and copy into an empty folder + 1. Download the jar file and copy into an empty folder - 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum. + 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum. 1. Saving window preferences - 1. Resize the window to an optimum size. Move the window to a different location. Close the window. + 1. Resize the window to an optimum size. Move the window to a different location. Close the window. - 1. Re-launch the app by double-clicking the jar file.
+ 1. Re-launch the app by double-clicking the jar file.
Expected: The most recent window size and location is retained. ### List tutee(s) @@ -840,92 +814,112 @@ testers are expected to do more *exploratory* testing. ### Adding a tutee 1. Adding a tutee into the list. + 1. Prerequisites: None + 2. Test case: `add n/Betsy Crowe p/92939402 e/betsycrowe@example.com a/Newgate Prison sb/Secondary 3 Physics d/mon b/1900 end/1930 pr/35.00`
+ Expected: The tutee is added into the bottom of the list. Details of the added tutee is shown in the status message. - 1. Prerequisites: None - - 2. Test case: `add n/Betsy Crowe p/92939402 e/betsycrowe@example.com a/Newgate Prison sb/Secondary 3 Physics d/mon b/1900 end/1930 pr/35.00`
- Expected: The tutee is added into the bottom of the list. Details of the added tutee is shown in the status message. + +2. Adding a duplicate tutee into the list + 1. Prerequisites: Completing the first test case for [Adding a tutee](#adding-a-tutee) + 2. Test case: `add n/Betsy Crowe p/92939402 e/betsycrowe@example.com a/Newgate Prison sb/Secondary 3 Physics d/mon b/1900 end/1930 pr/35.00`
+ Expected: The error message _This tutee already exists_ should be displayed in the status message. +3. Adding a tutee that has clashing schedules. + 1. Prerequisites: Completing the first test case for [Adding a tutee](#adding-a-tutee) + 2. Test case: `add n/Jason Antonius p/12345678 e/test@gmail.com a/PGPR Residences sb/CS1101S d/mon b/1900 end/1930 pr/20`
+ Expected: The error message _This date and time clashes with an existing schedule_ should be displayed in the status message. -2. Adding a duplicate tutee into the list +### Deleting a tutee + +1. Deleting a tutee while all tutees are being shown + 1. Prerequisites: List all tutees using the `list` command. Multiple tutees in the list. + 2. Test case: `delete 1`
+ Expected: First tutee is deleted from the list. Details of the deleted tutee shown in the status message. Timestamp in the status bar is updated. - 1. Prerequisites: Completing the first test case for [Adding a tutee](#adding-a-tutee) - - 2. Test case: `add n/Betsy Crowe p/92939402 e/betsycrowe@example.com a/Newgate Prison sb/Secondary 3 Physics d/mon b/1900 end/1930 pr/35.00`
- Expected: The error message _This tutee already exists_ should be displayed in the status message. +### Finding a tutee +1. Finding a tutee by their name + 1. Prerequisites: Have the default tutee data list. + 2. Test case: `find n/Betsy`
+ Expected: Tutees that contain the name predicate listed. -3. Adding a tutee that has clashing schedules. - 1. Prerequisites: Completing the first test case for [Adding a tutee](#adding-a-tutee) - - 2. Test case: `add n/Jason Antonius p/12345678 e/test@gmail.com a/PGPR Residences sb/CS1101S d/mon b/1900 end/1930 pr/20`
- Expected: The error message _This date and time clashes with an existing schedule_ should be displayed in the status message. - +2. Finding a tutee by their subject + 1. Prerequisites: Have the default tutee data list. + 2. Test case: `find sb/Maths`
+ Expected: Tutees that contain the subject predicate listed. -### Deleting a tutee -1. Deleting a tutee while all tutees are being shown +3. Finding a tutee by their name and subject + 1. Prerequisites: Have the default tutee data list. + 2. Test case: `find n/Betsy sb/Maths`
+ Expected: Tutees that contain both the name predicate and subject predicate listed. + + +4. Finding a tutee by their multiple word names + 1. Prerequisites: Have the default tutee data list. + 2. Test case: `find n/Betsy Crower`
+ Expected: The error message _Name can only take one word._ - 1. Prerequisites: List all tutees using the `list` command. Multiple tutees in the list. - 1. Test case: `delete 1`
- Expected: First tutee is deleted from the list. Details of the deleted tutee shown in the status message. Timestamp in the status bar is updated. +5. Finding a tutee by their multiple word subject + 1. Prerequisites: Have the default tutee data list. + 2. Test case: `find sb/English Language`
+ Expected: The error message _Subject can only take one word._ ### Editing a tutee 1. Editing a tutee while all tutees are being shown + 1. Prerequisites: Have the default tutee data and list all tutees using the `list` command. - 1. Prerequisites: Have the default tutee data and list all tutees using the `list` command. - - 2. Test case: `edit 2 n/Betsy Crower a/Betsy street, block 110, #03-02`
- Expected: Tutee is successfully edited, and the details of the edited tutee is shown in the status message. + 2. Test case: `edit 2 n/Betsy Crower a/Betsy street, block 110, #03-02`
+ Expected: Tutee is successfully edited, and the details of the edited tutee is shown in the status message. 2. Editing a tutee that causes duplicate tutees - 1. Prerequisites: Have the default tutee data and list all tutees using the `list` command. - - 2. Test case: `edit 2 n/Alex Yeoh p/87438807`
- Expected: The error message _This tutee already exists_ should be displayed in the status message. + 1. Prerequisites: Have the default tutee data and list all tutees using the `list` command. + + 2. Test case: `edit 2 n/Alex Yeoh p/87438807`
+ Expected: The error message _This tutee already exists_ should be displayed in the status message. 3. Editing a tutee that causes clashing schedules. - 1. Prerequisites: Have the default tutee data and list all tutees using the `list` command. - - 2. Test case: `edit 2 d/Mon b/2000 end/2200`
- Expected: The error message _This date clashes with an existing schedule_ should be displayed in the status message. + 1. Prerequisites: Have the default tutee data and list all tutees using the `list` command. + + 2. Test case: `edit 2 d/Mon b/2000 end/2200`
+ Expected: The error message _This date clashes with an existing schedule_ should be displayed in the status message. ### Find free time 1. Finding free time that results in no available timeslots - 1. Prerequisites: Have the default tutee data. - + 2. Test case: `freeTime d/Mon dur/30 b/2000 end/2100`
Expected: The result
- _Here is your list of free time:_
- _There are no available timeslots._
- should be displayed in the status message. + _Here is your list of free time:_
+ _There are no available timeslots._
+ should be displayed in the status message. 2. Finding free time that results in available timeslots - 1. Prerequisites: Have the default tutee data. - + 2. Test case: `freeTime d/Mon dur/30 b/1930 end/2130`
Expected: The result
- _Here is your list of free time:_
- _Free from 19:30 - 20:00_
- _Free from 21:00 - 21:30_
- should be displayed in the status message. + + _Here is your list of free time:_
+ _Free from 19:30 - 20:00_
+ _Free from 21:00 - 21:30_
+ should be displayed in the status message. + ### Marking a tutee as paid @@ -948,53 +942,46 @@ testers are expected to do more *exploratory* testing. 1. Prerequisites: List all tutees using the `list` command. Multiple tutees in the list. - 1. Test case: `unpaid 3`
+ 2. Test case: `unpaid 3`
Expected: Second tutee is from the list is marked as not paid. The message of marking person not paid success will be shown. Timestamp in the status bar is updated. - 1. Test case: `unpaid 0`
+ 3. Test case: `unpaid 0`
Expected: No tutee is marked as not paid. Error details shown in the status message. Status bar remains the same. - 1. Other incorrect unpaid commands to try: `unpaid`, `unpaid x`, `...` (where x is larger than the list size)
+ 4. Other incorrect unpaid commands to try: `unpaid`, `unpaid x`, `...` (where x is larger than the list size)
Expected: Similar to previous. ### Listing all unpaid tutees 1. All tutees who haven't paid will be shown - 1. There are tutees in the list. - 1. Test case: `list unpaid`
+ 2. Test case: `list unpaid`
Expected: All tutees who haven't paid will be shown. The message of how many tutees are unpaid will be shown. Timestamp in the status bar is updated. ### Undo command 1. Undo previous commands that can modify the data of tutees. - 1. Prerequisites: At least one tutee is present in the tutee list. Execute any command that modify tutee data. In this instruction, `clear` is used. - 2. Test case: `undo`
Expected: Restore all tutees that were cleared. A message informing the user that the command is successfully undone is displayed. -2. Undo when there are no previous commands that modify the data of tutees. +2. Undo when there are no previous commands that modify the data of tutees. 1. Prerequisites: Launch the application. Ensure no commands that modify the tutee data is executed. - 2. Test case: `undo`
Expected: No command is undone. Error details shown in the status message. ### Redo command 1. Redo a command when there is a undo command executed previously. - 1. At least one tutee is present in the tutee list. Execute any command that modify tutee data. In this instruction, `clear` is used followed by `undo`. - 2. Test case: `redo`
- Expected: Clear the tutee list again. + Expected: Clear the tutee list again. -2. Redo a command when there is no undo command executed previously to redo. +2. Redo a command when there is no undo command executed previously to redo. 1. Prerequisites: Ensure no `undo` command is executed after launching the application. - 2. Test case: `redo`
Expected: No command is redone. Error details shown in the status message. @@ -1002,7 +989,7 @@ testers are expected to do more *exploratory* testing. 1. Dealing with missing/corrupted data files - 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_ + 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_ 1. _{ more test cases …​ }_ @@ -1010,7 +997,7 @@ testers are expected to do more *exploratory* testing. 1. To be able to group/tag tutees into "Tutor Groups". These tutees will be able to have the same timeslot if they belong to the same "Tutor Group" 2. Allow tutees to have multiple lessons. Our current implementation does not allow the same tutee to have multiple lesson as a tutee is uniquely identified by their name and phone number. For example, if the user is teaching John Maths on Monday, he can't teach John Physics on a different day because the system will identify John as a duplicate tutee. -3. Enhance the edit feature. Currently, our edit feature might result in a bug if the NAME and (DAY/BEGIN/END) fields are edited at the same time. For example, if tutee index 1 has the name John and has a lesson on Monday 20:00 - 21:00, trying to do `edit 1 n/Doe end/2030` will result in an error (throwing the message that this date clashes with an existing scheduke). +3. Enhance the edit feature. Currently, our edit feature might result in a bug if the NAME and (DAY/BEGIN/END) fields are edited at the same time. For example, if tutee index 1 has the name John and has a lesson on Monday 20:00 - 21:00, trying to do `edit 1 n/Doe end/2030` will result in an error (throwing the message that this date clashes with an existing scheduke). ### Batch Processing for Paid Command @@ -1028,7 +1015,7 @@ Idea: Add a scheduling mechanism within the command execution to mark individual Reason: To create a more sophisticated find feature for the best results. This enhancement allows users to get more specific results tailored to their criteria. -Idea: Modify the NameContainsKeywordPredicate and SubjectContainsKeywordPredicate to accept multiple word inputs (e.g. "find n/Alex Yeoh sb/Maths Chemistry). +Idea: Modify the NameContainsKeywordPredicate and SubjectContainsKeywordPredicate to accept multiple word inputs (e.g. "find n/Alex Yeoh sb/Maths Chemistry). ### Maximum PayRate @@ -1041,7 +1028,18 @@ Idea: Modify the VALIDATION_REGEX of PayRate such that it only accepts values up Reason: `clear`,`edit`, `paid`, `delete`,`unpaidAll` are commands that deal with modifying tutee data. If the tutee's `isPaid` status is true, the system permits the user to execute the `paid` command even though this will not change the `isPaid` status of the tutee. If these commands do not change the tutee data in any way but still allowed to be executed, when the user executes `undo`, there will be no changes since there are now duplicate states of the `VersionedAddressBook` -is saved. The system should inform the user that this command will not modify any data and prevent the command from executing. +is saved. The system should inform the user that this command will not modify any data and prevent the command from executing. Idea: Create a `Model#isSameData()` to compare whether the state of the tutee data before and after the command execution will be the same. If `Model#isSameData()` returns true, a `CommandException` should be thrown and the system should inform the user that this command will not modify any data. + +### Enable Group Lessons + +Reason: Current `Lesson` implementation prevents any lessons clashes, that is no two `Person` objects can have lessons that fall in same timeslots. +However, this is based on the assumption that lessons are carried out on a one-on-one basis. Given the possibility of group lessons, having such a feature +would allow for more flexibility in the application. + +Idea: Create a `GroupTag` field for `Lesson` class which contain an ID for each `Lesson` object if they are group lessons. When checking if two +lesson clashes, allow for lesson clash if `Lesson` objects have the same IDs which means they are the same group lesson. + + diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 24190a07823..991c0bc1f0f 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -10,7 +10,7 @@ Fed up with setting up numerous unorganized spreadsheets on Microsoft Excel or G Or feeling overwhelmed with the ugly-looking chaos of your Google Calendar as your number of teaching schedules increase? -Say goodbye to all this mess with the help of **TuitionConnect**: the ultimate desktop app designed to streamline the administrative and financial tasks of your tuition business! +Say goodbye to all this mess with the help of **TuitionConnect**: the ultimate desktop app designed to streamline the administrative and financial tasks of your tutoring business! This user guide will teach you how to install **TuitionConnect** from scratch, as well as providing information about the interesting features of **TuitionConnect**. @@ -76,7 +76,7 @@ paired up with simple and beginner-friendly features, anyone can learn how to us 3. **Calendar Sanity**: Prevent clashes in your schedules, and find slots where you are available! :bulb: **Make the Switch Today!** -Transform your tutoring experience with **TuitionConnect!** Jump straight to the [Quick Start Section](#quick-start) and experience **TuitionConnect** today! +Transform your tutoring experience with **TuitionConnect!** Jump straight to the [Quick Start Section](#quick-start) and experience **TuitionConnect** now! ## Using this guide If you're feeling a bit lost, worry not! @@ -102,7 +102,7 @@ to better understand all the technical jargons! ## Symbols and Syntax -Throughout this User Guide, there might +Throughout this User Guide, you might run into the following symbols and syntax. | Symbol/Syntax | Meaning | |-------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| @@ -168,7 +168,7 @@ Here are the [parameter](#glossary) requirements of commonly used parameters by | **`DAY`** | Day of weekly recurring lesson of the tutee | Full name of day or first three letters of the full name
**Non-case sensitive**
Example: `Mon`/`Monday`/`monday` | | **`BEGIN`** | Begin time of a tutee's weekly recurring lesson | In **HHMM** format | | **`END`** | End time of a tutee's weekly recurring lesson | In **HHMM** format | -| **`PAYRATE`** | dollars per hour you make teaching this tutee | Numbers only
Numbers must be **non-negative** | +| **`PAYRATE`** | dollars per hour you make teaching this tutee | Numbers up to two decimal places only
Numbers must be **non-negative** | | **`INDEX`** | The index number of the tutee shown in the tutee list panel | Used in [`delete`](#deleting-a-tutee-delete) [`edit`](#editing-a-tutee--edit) [`unpaid`](#marking-a-tutee-as-unpaid--unpaid) and [`paid`](#marking-a-tutee-as-paid--paid) commands
Must be a **positive number**
Example: (1,2,3,...)
| | **`DURATION`** | The duration of a time slot in **minutes** | Used in [`freeTime`](#finding-free-time--freetime) Must be a **positive integer**
Example: (60,120,...)
| @@ -178,18 +178,22 @@ Here are the [parameter](#glossary) requirements of commonly used parameters by ### Viewing help : `help` -Shows a message that helps redirects you to the user guide. +**Description**: Redirects you to the user guide if you are ever lost. **Format**: `help` +**Sample Execution**: `help` + +![Help after](images/HelpAfter.png) + ### Adding a tutee : `add` -**Description**: Adds a tutee into the list. +**Description**: Adds new tutees you are tutoring into the list. **Format**: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS sb/SUBJECT d/DAY b/BEGIN e/END pr/PAYRATE` :exclamation: Things that can cause the `add` command to fail: -1. Putting invalid inputs into the add command. +1. Inserting invalid inputs into the add command. - :bulb: Check the [Parameter Requirements](#parameters-requirement) for valid parameter inputs. 2. Adding a tutee that will result in duplicate tutees. - :information_source: Two tutees are considered duplicates if they have the same name and phone number @@ -208,18 +212,25 @@ Shows a message that helps redirects you to the user guide. **Description**: View the tutees that you are currently teaching. -**Format**: `list [DAY]` +**Format**: `list [DAY]/[unpaid]` -* :information_source: The `DAY` parameter is optional. - * Without stating a specified `DAY`, `list` will display all of your tutees +:information_source: The `DAY` and `unpaid` parameters are optional. + * Without stating a specified `DAY` or `unpaid`, `list` will display all of your tutees * When `DAY` is specified, only tutees whose lessons matches the specified `DAY` will be displayed + * When `unpaid` is included, only tutees who have yet to pay for their lessons will be displayed + * `list` can only accept up to one parameter in a single command + + -* :exclamation: If the `DAY` parameter does not adhere to the specified format, the system will treat this as an invalid command - - :bulb: Check the [Parameter Requirements](#parameters-requirement) for valid parameter inputs. +:exclamation: Things that can cause the `list` command to fail: +1. If the `DAY` parameter does not adhere to the specified format, the system will treat this as an invalid command. + - :bulb: Check the [Parameter Requirements](#parameters-requirement) for valid parameter inputs. +2. Adding both `DAY` and `unpaid` parameters. **Examples**: * `list` * `list monday` +* `list unpaid` **Sample Execution**: `list monday` @@ -227,113 +238,80 @@ Shows a message that helps redirects you to the user guide. ### Finding a tutee : `find` -**Description** : Find tutees in the current list. +**Description** : Find tutees quickly in your current list. -**Format**: `find n/[NAME] sb/[SUBJECT]` +**Format**: `find [n/NAME] [sb/SUBJECT]` -> [!NOTE] -> Find takes at least one of the two fields to be able to find for tutees. +:information_source: `find` requires at least one of the two fields to be able to find for tutees and is non-case sensitive. -**Expected input:** +:information_source: As long as the tutee's `NAME` and/or `SUBJECT` contains the given keywords, the tutee will be displayed. + * Example: `find n/AL` returns a tutee named "ALICE" -* **Name (Optional field)**: String composed of character between A-Z and a-z -* **Subject (Optional field)**: String without restriction in characters +:information_source: Both n/ and sb/ prefixes take one word as input each. -> [!NOTE] -> Both n/ and sb/ prefixes take one word as input. +:exclamation: Things that can cause `find` command to fail: +1. Inserting invalid inputs into the find command. + - :bulb: Check the [Parameter Requirements](#parameters-requirement) for valid parameter inputs. +2. Inserting multiple word inputs for any of the two fields. + - :exclamation: As mentioned above, both prefixes can only take one word each as input. -**Expected Output when the command succeeds:** X tutees listed! +**Examples**: +* `find n/Alex` +* `find sb/Maths` +* `find n/Alex sb/Maths` -**Expected Output when the command fails:** +**Sample Execution**: `find n/Alex sb/Maths` -* **More than one word input for prefix n/**: Name can only take one word. -* **More than one word input for prefix sb/**: Subject can only take one word. -* **More than one word input for both prefix n/ and sb/**: Name can only take one word. +![findAfter](images/findAfter.png) -* **Invalid Input for prefix name n/**: -Names should only contain alphanumeric characters and spaces, - and it should not be blank -* **Invalid Input for prefix subject sb/**: Subject can take any values, and it should not be blank. -* **Invalid Prefix other than name n/ and subject sb/**: - Invalid command format! - find: Find persons with names or subjects matching the specified keywords (case-insensitive). - Parameters: n/NAME sb/SUBJECT +### Editing a tutee : `edit` - Examples: -1. find n/Alice sb/Maths -2. find n/Alice -3. find sb/Maths +**Description**: Edit a tutee in your current list. -* **No input after prefix name n/**: Names should only contain alphanumeric characters and spaces, -and it should not be blank -* **No input after prefix subject sb/**: Subject can take any values, and it should not be blank. -* **No input after prefixes name n/ and subject sb/**: Names should only contain alphanumeric characters and spaces, - and it should not be blank +**Format**: `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [s/SUBJECTS] [d/DAY] [b/BEGIN] [end/END] [pr/PAYRATE`] -### Editing a tutee : `edit` +:information_source: `edit` requires at least one of the fields to be present to be able to edit. + +:exclamation: Things that can cause `edit` command to fail: +1. Inserting invalid inputs into the `edit` command. + - :bulb: Check the [Parameter Requirements](#parameters-requirement) for valid parameter inputs. +2. Editing a tutee that will result in duplicate tutees. + - :information_source: Two tutees are considered duplicates if they have the same name and phone number. +3. Editing a tutee that will result in clashing schedules. + - :bulb: Use the [`freeTime` command](#finding-free-time--freetime) to list down timings when you are available and prevent schedule clashes. -**Description**: Edit a tutee in the current list. - -**Format**: `edit INDEX n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS s/SUBJECTS d/DAY b/BEGIN end/END pr/PAYRATE` - -**Expected Input**: -* **Index (Compulsory Field)**: Numbers between 1 to the number of people inside the list. -* **Name (Optional field)**: String composed of character between A-Z and a-z. -* **Phone number (Optional field)**: 8 digit number. -* **Email (Optional field)** String with restrictions in characters (XXXXXXXX@emaildomain) -* **Address (Optional field)**: String without restriction in characters. -* **Subject (Optional field)**: String without restriction in characters. -* **Day (Optional field)**: String with restrictions in characters, non-case sensitive (Mon/Monday/Tue/Tuesday/Wed/Wednesday/Thu/Thursday/Fri/Friday/Sat/Saturday/Sun/Sunday). -* **Begin (Optional field)**: String with restrictions (HHMM). -* **End (Optional field)**: String with restrictions (HHMM). -* **PayRate (Optional field)** String with restrictions in characters, only numbers allowed (no negative numbers). - -**Expected Output when the command succeeds**: Successfully edited XXX(Name) - -**Expected Output when the command fails**: - -* **Invalid Name**: Names should only contain alphanumeric characters and spaces, and it should not be blank -* **Duplicate tutee**: This tutee already exists -* **Invalid Phone number**: Phone numbers should only contain numbers, and it should be at least 3 digits long -* **Invalid Email**: Emails should be of the format local-part@domain and adhere to the following constraints: - 1\. The local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (+_.-). The local-part may not start or end with any special characters. - 2\. This is followed by a '@' and then a domain name. The domain name is made up of domain labels separated by periods. -* **Invalid Address**: Addresses can take any values, and it should not be blank -* **Invalid Day**: Days should be written using their full names or their first three letters, and it should not be blank -* **Invalid Begin**: Begin has a format of HHMM -* **Invalid End**: That is not a valid time format. End has a format of HHMM -* **Invalid PayRate**: PayRate can be either integers or decimals of up to 2 decimal places. It cannot be negative **Examples**: +* `edit 1 p/91234567 d/Sun` +* `edit 2 n/Betsy Crower a/Betsy street, block 110, #03-02` -To edit the phone number and day of tutoring of your first tutee in list: -* `edit 1 p/91234567 d/Sun` +**Sample Execution**: `edit 2 n/Betsy Crower a/Betsy street, block 110, #03-02` -To edit name and address of your second tutee in list: -* `edit 2 n/Betsy Crower a/Betsy street, block 110, #03-02` +![editAfter](images/editAfter.png) ### Deleting a tutee: `delete` -**Description**: Deletes the specific tutee from the list. +**Description**: Deletes the specific tutee from your list. **Format**: `delete INDEX` -**Expected Input**: +:exclamation: Things that can cause `delete` command to fail: +1. Inserting invalid `INDEX` into the `delete` command. + - :information_source: `INDEX` should not be smaller than 1 and larger than + the number of tutees in the list. -* **Index (Compulsory Field)**: Numbers between 1 to the number of people inside the list. +**Examples**: +* `list` followed by `delete 2` deletes the 2nd person in the list. -**Expected Output when the command succeeds**: Successfully deleted NAME from the list +**Sample Execution**: `delete 2` -**Expected Output when the command fails**: The tutee index provided is invalid - -Examples: -* `list` followed by `delete 2` deletes the 2nd person in the list. +![deleteAfter](images/deleteAfter.png) ### Clearing all entries : `clear` -**Description**: Want to start from scratch? Clears all entries from the tutee list. +**Description**: Clears all entries from your list to start from scratch. **Format**: `clear` @@ -346,37 +324,51 @@ Examples: ### Marking a tutee as paid : `paid` -**Description**: Mark the specific tutee as paid in the list. +**Description**: Mark a specific tutee as paid in your list. **Format**: `paid INDEX` +:exclamation: Things that can cause `paid` command to fail: +1. Inserting invalid `INDEX` into the `paid` command. + - :information_source: `INDEX` should not be smaller than 1 and larger than + the number of tutees in the list. + * **`INDEX`**: Numbers between 1 to the number of people inside the list. -Examples: +**Examples**: * `list` followed by `paid 1` marks the first person as paid in the list. +**Sample Execution**: `paid 1` + +![paidexample](images/paidexample.png) + ### Marking a tutee as unpaid : `unpaid` -**Description**: Mark the specific tutee as not paid in the list. +**Description**: Mark a specific tutee as not paid in your list. **Format**: `unpaid INDEX` -* **Index**: Numbers between 1 to the number of people inside the list. +:exclamation: Things that can cause `unpaid` command to fail: +1. Inserting invalid `INDEX` into the `unpaid` command. + - :information_source: `INDEX` should not be smaller than 1 and larger than + the number of tutees in the list. -Examples: +**Examples**: * `list` followed by `unpaid 2` marks the 2nd person as not paid in the list. -### Show all the unpaid tutees : `list unpaid` - -**Description**: Shows all the unpaid tutees in your list. +**Sample Execution**: `unpaid 2` -Format: `list unpaid` +![unpaidexample](images/unpaidexample.png) ### Mark all tutee as unpaid: `unpaidAll` -**Description** : Mark all tutees in the current displayed list as not paid. +**Description** : Mark all tutees in your current displayed list as not paid. -Format: `unpaidAll` +**Format**: `unpaidAll` + +**Sample Execution**: `unpaidAll` + +![unpaidAllexample](images/unpaidAllexample.png) ### Finding Free Time : `freeTime` @@ -396,11 +388,11 @@ Format: `unpaidAll` ### Undo previous command : `undo` -**Description**: Typed something wrong? Undo the most recent command that can modify the tutee data. +**Description**: Undo the most recent command if you made a mistake. **Format**: `undo` -* :information_source: You can only undo `add`,`clear`,`delete`,`edit`,`redo`,`paid`,`unpaid` and `unpaidAll` commands. +:information_source: You can only undo `add`,`clear`,`delete`,`edit`,`redo`,`paid`,`unpaid` and `unpaidAll` commands. **Examples**: * `undo` @@ -408,7 +400,7 @@ Format: `unpaidAll` **Sample Execution**: `clear` followed by `undo` 1. `clear` deletes all tutee in the tutee list -![clearCommand](images/clearCommand.png) +![clearCommand](images/ClearCommand.png) 2. `undo` restores all cleared tutees @@ -416,31 +408,34 @@ Format: `unpaidAll` ### Redo previous undone command : `redo` -**Description**: Changed your mind again? Redo the most recent command that was undone. +**Description**: Redo the most recent command that was undone if you changed your mind. **Format**: `redo` -**Examples**: -* `redo` - -### Calculating Monthly Revenue: `rev` +### Calculating monthly revenue: `rev` -**Description**: Displays the total monthly revenue calculated from all tutees. +**Description**: Calculate the total monthly revenue from all your tutees. **Format**: `rev` -**Expected Output**: Successfully calculated
-                     -          -Total monthly revenue: *$monthlyrevenue* +:information_source: `rev` command is time-sensitive (i.e. If the lesson occurrences varies between months, the value adjusts accordingly) + +**Sample Execution:** `rev` + +![Revenue Command Success](images/RevenueCommandSuccess.png) + ### Exiting the program : `exit` -Exits the program. +**Description**: Exits the program when you are done. + +**Format**: `exit` + +:information_source: The application window closes automatically after you type the command `exit` + + -Format: `exit` -* The application window closes automatically after you type the command `exit` diff --git a/docs/diagrams/FindSequenceDiagram.puml b/docs/diagrams/FindSequenceDiagram.puml index 0fb67e376f4..5d403915add 100644 --- a/docs/diagrams/FindSequenceDiagram.puml +++ b/docs/diagrams/FindSequenceDiagram.puml @@ -53,10 +53,10 @@ activate FindCommand note right predicate: -the keyword for the prefix n/ +the predicate for the prefix name n/ subject: -the keyword for the prefix sb/ +the predicate for the prefix subject sb/ end note FindCommand --> FindCommandParser : command @@ -85,7 +85,7 @@ FindCommand -> Model : updateFilteredPersonList(nameSubject) activate Model deactivate Model -note right +note left nameSubject: the predicate of both inputs for keywords n/ and sb/ end note diff --git a/docs/images/EditSequenceDiagram.png b/docs/images/EditSequenceDiagram.png index b6177e5213c..4d0ed2b8379 100644 Binary files a/docs/images/EditSequenceDiagram.png and b/docs/images/EditSequenceDiagram.png differ diff --git a/docs/images/FindSequenceDiagram.png b/docs/images/FindSequenceDiagram.png index d86ee25492d..198fdb1e328 100644 Binary files a/docs/images/FindSequenceDiagram.png and b/docs/images/FindSequenceDiagram.png differ diff --git a/docs/images/HelpAfter.png b/docs/images/HelpAfter.png new file mode 100644 index 00000000000..cc751ce596c Binary files /dev/null and b/docs/images/HelpAfter.png differ diff --git a/docs/images/RevenueCommandSuccess.png b/docs/images/RevenueCommandSuccess.png new file mode 100644 index 00000000000..6c0ed138178 Binary files /dev/null and b/docs/images/RevenueCommandSuccess.png differ diff --git a/docs/images/deleteAfter.png b/docs/images/deleteAfter.png new file mode 100644 index 00000000000..766aa8cec75 Binary files /dev/null and b/docs/images/deleteAfter.png differ diff --git a/docs/images/editAfter.png b/docs/images/editAfter.png new file mode 100644 index 00000000000..28a13bdeecb Binary files /dev/null and b/docs/images/editAfter.png differ diff --git a/docs/images/findAfter.png b/docs/images/findAfter.png new file mode 100644 index 00000000000..35ab3f35fbf Binary files /dev/null and b/docs/images/findAfter.png differ diff --git a/docs/images/listunpaidexample.png b/docs/images/listunpaidexample.png new file mode 100644 index 00000000000..165de416d5d Binary files /dev/null and b/docs/images/listunpaidexample.png differ diff --git a/docs/images/paidexample.png b/docs/images/paidexample.png new file mode 100644 index 00000000000..74c10a04336 Binary files /dev/null and b/docs/images/paidexample.png differ diff --git a/docs/images/unpaidAllexample.png b/docs/images/unpaidAllexample.png new file mode 100644 index 00000000000..ecdbc69f951 Binary files /dev/null and b/docs/images/unpaidAllexample.png differ diff --git a/docs/images/unpaidexample.png b/docs/images/unpaidexample.png new file mode 100644 index 00000000000..59e9941f8ed Binary files /dev/null and b/docs/images/unpaidexample.png differ diff --git a/docs/team/jovkusuma.md b/docs/team/jovkusuma.md index 055ece8a802..df81a2d9261 100644 --- a/docs/team/jovkusuma.md +++ b/docs/team/jovkusuma.md @@ -4,34 +4,62 @@ title: Armando Jovan Kusuma's Project Portfolio Page --- ### Project: TuitionConnect +TuitionConnect is a **desktop app** built for tutors and tutoring businesses to simplify the process of +administration and finance management, optimized for use via a **Command Line Interface** (CLI) while +still having the benefits of a Graphical User Interface (GUI). -to be added soon -Given below are my contributions to the project. +**Code contributed:** Click here for [RepoSense Link](https://nus-cs2103-ay2324s1.github.io/tp-dashboard/?search=jovkusuma&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code&since=2023-09-22&tabOpen=true&tabType=authorship&tabAuthor=jovkusuma&tabRepo=AY2324S1-CS2103T-F10-4%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false&authorshipIsIgnoredFilesChecked=false). -* **New Feature**: - * to be added soon. - -* **Code contributed**: - * https://nus-cs2103-ay2324s1.github.io/tp-dashboard/?search=jovkusuma&breakdown=true -* **Project management**: - * to be added soon. +**Enhancements implemented:** -* **Enhancements to existing features**: - * Enhance find command to be able search for names and subjects using partial keywords. - * Enhance find command to be able to search for at least one of `name` and `subject`. - * Remove `tag` field as it is not needed for our implementation. +* Refactored the `add` and `edit` command. + * Remove tags as parameter for both `add` and `edit` command. + * (Pull Requests [#90](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/90)) -* **Documentation**: - * User Guide: - * Did tweaks to existing documentation for the feature `find` command - * Determine the overall structure and format of the user guide. - * Developer Guide: - * Added use cases for `add` and `delete` of a tutee. +* Enhance the `find` command + * Allow users to find tutees using partial keywords. + * Allow users to find by name and/or subject to find for tutees. + * (Pull Requests [#68](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/68), [#127](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/127)) -* **Community**: - * to be added soon. +* Enforce that `begin` time should strictly be before `end` time. + * Restrict users to only input `begin` times which are before `end` times. + * (Pull Requests [#111](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/111)) -* **Tools**: - * to be added soon. +* Write and fixing test cases: + * Fixed the test cases for `StringUtilTest`, `AddressBookParserTest`, `FindCommandTest`, `FindCommandParserTest`, `NameContainsKeywordsPredicateTest` + to support refactored `find` command (Pull Requests [#68](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/68),[#127](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/127)). + * Fixed the test cases for `AddCommandTest`, `EditCommandTest` to support the enforcement of begin time less than end time (Pull Requests [#111](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/111)). + * Wrote test cases for `SubjectContainsKeywordsPredicateTest`, `NameSubjectPredicateTest` + to test the `find` Command (Pull Requests [#127](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/127), [#199](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/199)). + +**Contributions to the UG:** + +* Added `Using this guide` and `Glossary` sections (Pull Requests [#209](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/209)). +* Wrote features and descriptions for `help`, `find`, `edit` and `delete` (Pull Requests [#235](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/235)). + + +**Contributions to the DG:** + +* Added use cases for `add`, `edit` and `find` commands (Pull Requests [#102](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/102), [#210](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/210)). +* Added description and sequence diagram for `find` and `edit` commands (Pull Requests [#197](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/197)). +* Wrote manual test cases for `find` command (Pull requests [#234](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/234)). +* Wrote planned enhancements (Pull Requests [#210](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/210)). + + +**Contributions to team-based tasks**: + + +* Updating config.yml (Pull Requests [#53](https://github.com/AY2324S1-CS2103T-F10-4/tp/pull/53)). + + +**Review/Mentoring contributions:** + +* Reviewed a total of 31 PRs. +* Reviewed and offered suggestions for team member's pull requests. + + +**Contributions beyond the team project:** + +* Assisted other teams and reported 9 bugs during the [Practical Exam Dry Run](https://github.com/jovkusuma/ped/issues). diff --git a/docs/team/yihfei.md b/docs/team/yihfei.md index 8f2270a3978..00dde1e0292 100644 --- a/docs/team/yihfei.md +++ b/docs/team/yihfei.md @@ -26,6 +26,7 @@ Given below are my contributions to the project. * Maintained the team collaboration google docs (e.g. documenting features for v1.3) * Renamed the product * Created the icon for product + * Drafted the mock UI * **Enhancements to existing features**: * Enhanced the GUI (Implement coloured tags for paid indicator, tags for subject, rounded corners for result display and search bar) @@ -36,8 +37,7 @@ Given below are my contributions to the project. * Added and modified documentation for the features `add` , `edit` and `rev` features * Updated GUI pictures * Developer Guide: - * Added implementation details of the `delete` feature. - + * Added implementation details and sequence diagrams of the `add` and `rev` feature. * **Community**: * to be added soon