diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 6f4c3ffc09d..5c52f00af5e 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -170,7 +170,7 @@ For the following Use Cases (unless specified otherwise): **Use Case: UC01 - Adding a Transaction** **MSS:** -1. User enters the command to add a transaction with the correct format. +1. User enters the command to add a transaction. 2. User submits the request. 3. UniCa$h adds the transaction to the transactions list and displays success message. @@ -185,29 +185,11 @@ For the following Use Cases (unless specified otherwise): - 2b2. User confirms the request - Use case resumes at step 3. -**Use Case: UC02 - Finding a Transaction** -**MSS:** -1. User enters the command to find a transaction with the correct format. -2. User submits the request. -3. UniCa$h filters all the transactions based on the specified filters and returns -the filtered transaction with a success message. - - Use Case ends - -**Extensions** -- 2a. User enters an incorrect format. - - 1a1. UniCa$h displays an error message with the correct command format. - - Use case resumes at step 1. - -- 3a. UniCa$h does not find any results matching the filter. - - 3a1. UniCa$h displays a message saying no results found. - - Use Case resumes at step 1 - -**Use Case: UC03 - Delete a Transaction** +**Use Case: UC02 - Delete a transaction** **MSS:** -1. User enters the command to delete a transaction with the correct format. +1. User enters the command to delete a transaction. 2. User submits the request. 3. UniCa$h finds the transaction based on the passed in arguments. 4. UniCa$h deletes the transaction. @@ -220,11 +202,7 @@ the filtered transaction with a success message. - 2a1. UniCa$h displays an error message with the correct command format. - Use case resumes at step 1. -- 3a. UniCa$h does not find any transactions matching the provided arguments. - - 3a1. UniCa$h displays a message saying no results found. - - Use Case resumes at step 1 - -**Use Case: UC04 - Editing a Transaction** +**Use Case: UC03 - Editing a Transaction** **MSS:** 1. User enters the command to edit an existing transaction's fields. @@ -248,10 +226,10 @@ the filtered transaction with a success message. - Use case resumes at step 1. -**Use Case: UC05 - Listing all Transactions** +**Use Case: UC04 - Listing all Transactions** **MSS:** -1. User enters the command to list all transactions with the correct format (i.e. no parameters). +1. User enters the command to list all transactions. 2. User submits the request. 3. UniCa$h retrieves the list of all transactions and displays them for the User. @@ -266,10 +244,11 @@ the filtered transaction with a success message. - 3a1. UniCa$h displays no transactions, and informs the user that all transactions have been retrieved. - Use Case ends. -**Use Case: UC06 - Finding a Transaction** + +**Use Case: UC05 - Finding a Transaction** **MSS:** -1. User enters the command to find transaction with the correct format. +1. User enters the command to find transactions. 2. User submits the request. 3. UniCa$h filters the transactions based on the specified filters and returns the filtered list of expenses with a success message. @@ -278,16 +257,10 @@ the filtered transaction with a success message. **Extensions** - 2a. User enters an incorrect format. - 2a1. UniCa$h displays an error message, requests for correct format. - - 2a2. User enters command with new format. - Steps 2a1-2a2 are repeated until the format entered is correct. - - Use case resumes from Step 3. + - Use case resumes from Step 1. -- 3a. UniCa$h does not find any results matching the filter. - - 3a1. UniCa$h displays a message informing the user that no results were found. - - Use Case ends. - -**Use Case: UC07 - Get Total Expenditure** + +**Use Case: UC05 - Get Total Expenditure** **MSS:** 1. User enters the command to get the total expenditure. @@ -303,26 +276,39 @@ the filtered transaction with a success message. - 2a1. UniCa$h displays an error message, requests for command to be re-entered. - Use case resumes at step 1 -**Use Case: UC08 - Clear All Transactions** + +**Use Case: UC06 - Clear all transactions** **MSS:** -1. User enters the command to clear all transactions with the correct format. (i.e. no parameters) +1. User enters the command to clear all transactions. 2. User submits the request. 3. UniCa$h deletes all transactions in the transactions list. 4. UniCa$h displays success message. - Use Case ends + Use Case ends. **Extensions** - 2a. User enters an incorrect format. - 2a1. UniCa$h displays an error message with the correct command format. - Use case resumes at step 1. -- 3a. UniCa$h finds an empty transactions list. - - 3a1. UniCa$h displays a message saying that transactions list is empty. - - Use Case resumes at step 1 +**Use Case: UC07 - Reset UniCa$h** -**Use Case: UC09 - Show Summary Statistics** +**MSS:** +1. User enters the command to reset UniCa$h. +2. User submits the request. +3. UniCa$h restores all transactions in the transactions list to the default transactions +4. UniCa$h displays success message. + + Use Case ends. + +**Extensions** +- 2a. User enters an incorrect format. + - 2a1. UniCa$h displays an error message with the correct command format. + - Use case resumes at step 1. + + +**Use Case: UC08 - Show Summary Statistics** **MSS:** 1. User enters the command to get the summary for their expenses. @@ -338,28 +324,29 @@ the filtered transaction with a success message. - 2a1. UniCa$h displays a prompt informing the user that there are no expenses available. - Use case ends. -**Use Case: UC10 - Show UniCa$h Help** +**Use Case: UC09 - Show UniCa$h Help** **MSS:** -1. User enters the command to show help with the correct format. (i.e. no parameters) +1. User enters the command to show help. 2. User submits the request. -3. UniCa$h displays help message in the help window. +3. UniCa$h opens help window with link to User Guide +4. UniCa$h displays the default welcome message with overview of commands - Use Case ends + Use Case ends. **Extensions** - 2a. User enters an incorrect format. - 2a1. UniCa$h displays an error message with the correct command format. - Use case resumes at step 1. -**Use Case: UC11 - Exit UniCa$h** +**Use Case: UC10 - Exit UniCa$h** **MSS:** -1. User enters the command to exit UniCa$h with the correct format (i.e. no parameters) +1. User enters the command to exit UniCa$h. 2. User submits the request. 3. UniCa$h displays exit message and application closes - Use Case ends + Use Case ends. **Extensions** - 2a. User enters an incorrect format. @@ -367,7 +354,7 @@ the filtered transaction with a success message. - Use case resumes at step 1. -**Use Case: UC12 - Set Budget** +**Use Case: UC11 - Set Budget** **MSS:** 1. User enters the command to set the budget. @@ -387,7 +374,7 @@ the filtered transaction with a success message. - 4a1. UniCa$h replaces existing budget with new one. - Use case resumes at step 5. -**Use Case: UC13 - Clear Budget** +**Use Case: UC12 - Clear Budget** **MSS:** 1. User enters the command to clear the budget. @@ -404,7 +391,7 @@ the filtered transaction with a success message. - Use case ends. -**Use Case: UC14 - Get Budget** +**Use Case: UC13 - Get Budget** **MSS:** 1. User enters the command to get the budget. @@ -420,6 +407,21 @@ the filtered transaction with a success message. - 3a1. UniCa$h displays a prompt to create a budget first. - Use case ends. +**Use Case: UC14 - Retrieve a transaction** + +**MSS:** +1. User enters the command to retrieve (i.e. `get`) a transaction. +2. User submits the request. +3. UniCa$h retrieves the transaction based on the passed in arguments. +4. UniCa$h displays expanded details of that transaction + + Use Case ends. + +**Extensions** +- 2a. User enters an incorrect format. + - 2a1. UniCa$h displays an error message with the correct command format. + - Use case resumes at step 1. + --- ## Design Overview @@ -430,7 +432,8 @@ the filtered transaction with a success message. The architecture for UniCa$h leverages the existing architecture from AB3 and extends several components like supporting storage of transactions and the budget. -### UI Component + +### User Interface (UI) Component UniCa$h is a Graphical User Interface (GUI) application, built using JavaFX. The following section describes the implementation of the various UI components in UniCa$h. @@ -441,7 +444,7 @@ UniCa$sh consists of the following UI components: 2. Help Window 3. Statistics / Budget Window - + In this section, we will be going through the implementation of the main window. @@ -454,7 +457,10 @@ the user with the ability to type their commands into the application. For the transaction list pane, we have a custom `TransactionListPanel` class that is a `ListView` to provide the user with a scrollable list of transactions. This view is updated whenever the user executes -commands that modify the transaction list. (i.e. `add`, `delete`, `edit`, `clear`) +commands that modify the transaction list. (i.e. `add`, `delete`, `edit`, `clear`). This `ListView` is displayed +in a reverse scrolling manner so that the user's most recent transactions will be added to the top of the +`TransactionListPanel`, right below the `CommandBox`, so that the user will have immediate feedback after adding +a transaction via text input into the `CommandBox`. For the command results pane, we have a custom `ResultDisplay` class. This pane displays the results of the user's command execution. This view is updated whenever the user executes commands that modify the transaction. @@ -477,6 +483,146 @@ The `UI` component is also responsible for: - executing commands using the `Logic` component, through the `executeCommand` method - listening for changes to the `Model` component, through the `listenToModelChanges` method +### UI Layout + +UniCa$h is designed with users who prefer to use the keyboard in mind. Thus, almost all +user input is designed for CLI-type usage, i.e. text-based keyboard input, and User Interface +elements are intended to either supplement this main functionality, or provide graphical support +for features. + +When UniCa$h is first opened, by default, the UniCa$h welcome message will be displayed in +the `Results Display`. This message can also be invoked with the `help` command which will +be explained in the [User Guide](UserGuide.md#help). Below are the main User Interface +(UI) components and features we have implemented in UniCa$h. + +![img_2.png](images/unicash/UniCashUIAnnotated.png) + +
+The commands and inputs used for the purposes of demonstrating certain UI features are explained fully +in the [User Guide](UserGuide.md) **Where applicable, consider those explanations as the single source of +authority for those commands, as the representation here is merely for UI demonstration purposes only.** +
+ +#### UniCa$h Main Window + +- The Main Window in UniCa$h is resizeable, but has a minimum size enforced of `850 x 620` +- The Menu bar contains the `File` and `Help` menus, of which `Help` can be opened with the + `F1` keyboard shortcut, which is also default to the original `AB-3`. + +
+On macOS, using UniCa$h in fullscreen will sometimes cause the Summary Window and +Help Window to also open in fullscreen, however this is an expected behaviour caused by +macOS's window management style, and cannot be overridden, but does not cause any functional +issues. Simply exit fullscreen mode to continue using UniCa$h as per normal. +
+ +#### UniCa$h Help Window + +- The Help Window can be opened with the `F1` keyboard shortcut, which is also default to the original `AB-3`. +- It can also be invoked with the `help` command, and doing so will populate + the `Results Display` with the default UniCa$h Welcome Message. +- Clicking on the `Copy URL` button will copy the URL to the clipboard. + + +![img_1.png](images/unicash/UniCashHelpWindow.png) + + +#### Command Box +- The `Command Box` is the primary means by which the user interacts actively with the application. +- The user types specific inputs into the `Command Box` and presses `ENTER` after typing to "communicate" with UniCa$h. +- Given that our application is targeted for users who prefer CLI-type text input interaction, the `Command Box` + is configured such that it can remember up to `10` latest user inputs. + - When a user presses `ENTER` on any input, the input is stored regardless of its validity. + - These inputs can be traversed through with the `UP` and `DOWN` arrow keys on the keyboard. + - Only the `10` most recent inputs are stored by the `Command Box` +- At any point in time, the user can press the `ESC` to empty the current text field in the `Command Box` + +
+The mouse cursor being too close to the menu can occasionally trigger the JavaFX built-in +cursor control functionality that allows arrows keys to be used for navigating the menu bar. +If it happens, simply move your mouse cursor away from the menu bar and click on the `Command Box` +to continue. +
+ + +#### Transactions List +- Each transaction stored in UniCa$h is displayed in the `Transactions List`. +- The entire `Transactions List` will be displayed by default upon start-up. +- Certain commands like `find` might limit the `Transactions List` to a particular configuration + which can be reversed with the `list` command to show the full list. +- Transactions added will immediately appear at the top of the `Transactions List`, and this is to + provide immediate response to the user as they will be able to see their most recently input + transaction right away. + +
+The most recent transactions appear at the top of the `Transactions List` as the +`Transactions List` is ordered by the time at which the user inputs the transaction, not the +actual date and time associated with that particular transaction. +
+ +#### Transaction Card +- The `Transactions List` contains individual `Transaction Cards`, each corresponding to + a single `Transaction` and they look like this: + + + +- **Transaction Index (or ID/Number):** All terms used synonymously to refer to the number shown on the left partition of the blue box. + - Transactions are not inherently indexed, the index values refer to the position of the + Transaction on the `Transactions List` + - Thus, index values are not static - depending on the configuration of currently displayed + `Transactions List`, this number might change. +- **Transaction Name:** The name of the given transaction, shown on the right partition of the blue box. +- **Transaction Date & Time:** The date & time assigned to the transaction, shown inside the pink box. +- **Transaction Location:** The location assigned to the transaction, shown inside the red box. +- **Transaction Categories:** The category/categories assigned to the transaction, shown inside the yellow box. + This can be empty if the transaction has no categories assigned to it. +- **Transaction Amount:** The expense or income assigned to the transaction, shown inside the black box. + - _Given that `0.00` is a valid amount, its display colour and magnitude sign will depend + on the type of transaction only._ + + +
+ +Certain properties above (such as name, location, categories and amount) +are allowed values that exceed the UI's capacity to display them fully. + +

+ +

This effect is accounted for as we do not wish to limit the user to arbitrary +lengths. Thus, the `get` command is available to retrieve the full, expanded details +of these transactions and display them in the `Results Display` component. +
+ + +#### Results Display + +- The `Results Display` is the primary means by which UniCa$h "responds" back + to the user via text output. +- The `Results Display` can be scrolled if the text output displayed is too long. + +#### Data Source Indicator + +- The `Data Source Indicator` shows the location of the current UniCa$h storage file. + + +#### Rolling Balance Indicator + +- The `Rolling Balance Indicator` shows the net sum (i.e. `total income - total expense`) + for the **currently displayed** `Transactions List`. +- For example, if the input `find n/friends` was used to find transactions whose names + contain the keyword `friends`, the `Transactions List` would be updated to + only show matching transactions and likewise the `Rolling Balance Indicator` + would reflect the net sum for these group of transactions **only**. +- As UniCa$h starts up with the full `Transactions List` by default, the + `Rolling Balance Indicator` would likewise show the net sum of all transactions in UniCa$h + at start-up. + +
+Unlike the color of the amount of a transaction in the `Transactions List`, the color of +the `Rolling Balance Indicator` will change based on whether the net sum is positive (green) +or negative (red) or zero (black). +
+ ### Logic Component **API** : [`Logic.java`](https://github.com/AY2324S1-CS2103-T16-3/tp/blob/master/src/main/java/unicash/logic/Logic.java) @@ -730,9 +876,177 @@ These changes work around the limitation of Linux and MacOS runners on Github Ac By introducing UI testing into the code coverage reporting, we have been able to achieve a code coverage of > 90%! -### General Classes and Components +#### User Input Builder + +The `UserInputBuilder` class is a test utility class for the purposes of generating possible +user inputs for a given `Transaction`. With a given `Transaction` object, it becomes possible +to generate a `String` that represents what a user might have input in order to have +stored that `Transaction.` This allows for the conversion of a `Transaction` object +into an equivalent user-input. Such a conversion would be beneficial for `FxRobot` which can use +`Transaction` objects' data directly to emulate user input and enter commands into the +`Command Box`. + +Given below is a snippet of the class, including one of its constructors. As you can see, +a `UserInputBuilder` object is created by taking in a `Transaction` as one of its parameters. + +```java +public class UserInputBuilder { + + ... + + private final Transaction transaction; + private String userInput; + + + public UserInputBuilder(Transaction transaction) { + requireNonNull(transaction); + this.transaction = transaction; + userInput = ""; + + } +``` + +The code snippet below shows the `withAllProperties()` method in this class that uses the +encapsulated `Transaction` object to generate a concatenated string of possible user inputs. + +```java +public UserInputBuilder withAllProperties() { + return new UserInputBuilder(transaction) + .addName() + .addAmount() + .addType() + .addLocation() + .addDateTime() + .addCategories(); +} +``` + +For each property `X`, the corresponding `addX()` method would append the appropriate CLI +`PREFIX` for that property, and the property itself in a manner similar to what a user would +have to input. +```java +public UserInputBuilder addName() { + userInput = userInput + WHITESPACE + PREFIX_NAME + transaction.getName(); + + return this; +} +``` +Not all properties are relevant for every command, therefore each property's relevant `add()` +method can be used individually to form a user input string instead of using the `withAllProperties` +method. + +Optionally, a `COMMAND WORD` can also be prefixed to the +userInput as shown below, taking the `CommandType` enum itself as the input parameter. + +```java +public UserInputBuilder addCommand(CommandType command) { + userInput = command.getMainCommandWord() + WHITESPACE + userInput; + + return this; +} +``` + +The use for such a utility class is demonstrated below: + + +```java +public static List getTestTransactionsAsUserInputs() { + ArrayList userInputList = new ArrayList<>(); + + for (Transaction transaction : getTestTransactions()) { + String userInput = new UserInputBuilder(transaction) + .withAllProperties() + .addCommand(CommandType.ADD_TRANSACTION) + .toString(); + + userInputList.add(userInput); + + } + return userInputList; +} +``` +The above method belongs to another utility class, in which the `getTestTransactions()` method +returns a `Transaction[]` array consisting of a variety of test transactions. + + +```java + ... + for (String userInput : getTestTransactionsAsUserInputs()) { + robot.clickOn("#commandBoxPlaceholder"); + robot.write(userInput); + robot.type(KeyCode.ENTER); + } + ... +``` +The output of the `getTransactionsAsUserInputs()` method is a `List` of `Strings` with each of them +corresponding to the user input required to add that particular `Transaction` into UniCa$h. This list can then +be passed to `FxRobot` to emulate user input for a variety of transactions. A snippet of such +procedure is shown above. + +### Support Classes and Components + +#### StyleSheet Class + +The `StyleSheet` class serves as a centralized information source for visual elements for all +UI components requiring some form of graphical representation. Within this class, preset colors are +defined as constants, which can then be used by UI elements across UniCa$h. Thus, when these +preset colors are modified, all UI elements will have a consistent change across UniCa$h. + +In the future, given the extensibility and universality of the `StyleSheet` class, it is +possible to allow the user to be able to choose their own themes for the app. Below is a snippet +of constants from the `StyleSheet` class, used for text colour filling and font styling. + +```java +/* Text colour filling */ +public static final String TEXT_FILL_RED = "-fx-text-fill: red"; +public static final String TEXT_FILL_GREEN = "-fx-text-fill: green"; +public static final String TEXT_FILL_BLACK = "-fx-text-fill: black"; +public static final String TEXT_FILL_WHITE = "-fx-text-fill: white"; + +/* Font styling */ +public static final String FONT_STYLE_BOLD = "-fx-font-weight: bold"; +public static final String FONT_STYLE_REGULAR = "-fx-font-weight: normal"; +public static final String FONT_STYLE_ITALIC = "-fx-font-style: italic"; +``` + +**Hash-Based Category Colouring:** UniCa$h doesn't place a restriction on the maximum number of +categories available in total, across the app. Thus, colour coding each category was not possible, +and a means for ensuring that unique categories (i.e. same case-insensitive name) have unique +colours needed to be devised. We found that using a category's hash code was the most optimal +solution and so a method that converts a category's hash code into a 6-digit hexademical RGB +colour code was created. To offset outlier values that resulted in dark colours with poor +legibility, a brightness offset function was also written, a modified snippet of that function +is shown below. + +```java + + int r = Integer.parseInt(...); + int g = Integer.parseInt(...); + int b = Integer.parseInt(...); + + int avg = (r + g + b) / 3; + + if (avg < BRIGHTNESS_THRESHOLD) { + r = adjustBrightness(r); + g = adjustBrightness(g); + b = adjustBrightness(b); + +``` +_The above function determines the average brightness based on the average values of the +red, green, and blue colour values, and an adjustment is made if this average falls below a certain +threshold, and the threshold itself can be adjusted to achieve certain colour complexities._ + +The focus on colour consistency and user experience across UniCa$h is motivated +by certain scientific [studies](https://www.sciencedirect.com/science/article/abs/pii/S0167811623000599]) +that show a positive correlation between colour complexity and user engagement. +[This](https://www.diva-portal.org/smash/record.jsf?pid=diva2%3A1788177&dswid=-2283) study found certain +design elements contribute to increased user engagement especially by young adults. +The UI components are intended to increase user engagement with UniCa$h amongst our target users, who are +mostly young adults. This would consequently lead to improvement in personal financial management. +Thus, even though these are not CLI features directly, they nonetheless benefit our target users +and support our value proposition indirectly. + -#### StyleSheet #### Command Usage Message Builder @@ -808,7 +1122,7 @@ For more details on the constraints of each property of `Transaction`, refer to #### Add Transaction -##### Overview +**Overview** The `add_transaction` command adds a new `Transaction` to the `TransactionList` in UniCash. @@ -840,7 +1154,7 @@ a specified value of 5 in the `UniqueCategoryList` class. Else, a `ParserExcepti #### Get Total Expenditure -##### Overview +**Overview** The `get_total_expenditure` command returns the total expenditure across a given month among all `expense` transactions in UniCa$h, with optional filters for a given category and year. @@ -886,45 +1200,44 @@ The category is a single filter that is matched in a case-insensitive manner #### Delete Transaction -##### Overview +**Overview** -The `DeleteCommand` function deletes an existing `Transaction` from `TransactionList` in UniCash. +The `delete_transaction` command deletes an existing `Transaction` from the `TransactionList` in UniCa$h. The activity diagram of deleting a Transaction is as shown below - + The following sequence diagram shows the interaction between different components of UniCash. - + The above sequence diagram omits details on the filtering of `TransactionList` and assumes that the displayed `TransactionList` is showing all transactions. However, the logic of the `DeleteCommand` remains the same for all list deletion. -ℹ️ **Note:** The lifeline for `DeleteTransactionCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, -the lifeline reaches the end of diagram. +
+**Note:** The lifeline for `DeleteTransactionCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. +
-##### Details +**Details** -1. The user specifies the transaction to be deleted by stating the integer index of the transaction to be deleted. -2. The input will be parsed by `DeleteTransactionCommandParser` and if the provided input is invalid, `ParseException` will be thrown, - and the user is prompted to enter the command again with the correct input. -3. If the input is valid, an `Index` object is created with the given input integer, and passed into `DeleteTransactionCommand` to be executed +1. The user specifies the transaction to be deleted by stating the appropriate index of the transaction to be deleted. +2. The input will be parsed by `DeleteTransactionCommandParser` and if the provided index is invalid, `ParseException` will be thrown, + and the user is prompted to enter the command again with the valid index. +3. If the input is valid, an `Index` object is created with the given input index, and passed into `DeleteTransactionCommand` to be executed by `LogicManager` -4. `LogicManger` will invoke the `execute` method of `DeleteTransactionCommand` which will delete the `Transaction` from UniCash. +4. `LogicManger` will invoke the `execute` method of `DeleteTransactionCommand` which will delete the `Transaction` from UniCa$h. -It is important to take note that when the user input is parsed, it is based on the currently displayed `TransactionList` inside -`TransactionListPanel`. This means that even if a `TransactionList` contains `10` transactions, given a specific nominally valid -number like `7`, it can still throw a `ParseException` if the shown `TransactionList` contains less than `7` items. This feature is -intentional, as the User is able to, for example, `find` a particular group of transaction and immediately delete those transactions -by just looking at their displayed index number without having to refer to an external identifier of that transaction. UniCash will -automatically handle the visual ordering and representation of transactions with the `TransactionsListPanel` in the UI. The details -and diagrams for this part will be elaborated further in the UI section (and other relevant sections) of this Developer Guide. +
+You can refer to the `INDEX` constraints in [command breakdown's Argument Types section](UserGuide.md#argument-types) in the User Guide. +You can also refer to the [UI Layout's Transaction Card section](#transaction-card) to learn about the transaction index values that +can change based on the current `Transactions List` configuration. +
#### Edit Transaction -##### Overview +**Overview** The `edit_transaction` command edits an existing `Transaction` from the `TransactionList` in UniCa$h. @@ -936,7 +1249,7 @@ The following sequence diagram shows how the different components of UniCa$h int **Note:** The lifeline for `EditTransactionCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. -##### Details +**Details** 1. The user specifies the transaction to be edited by first stating the (one-based) index of the transaction they want to edit. This is followed by listing the fields and updated values that they would like to edit. @@ -956,6 +1269,174 @@ Although all fields can be edited, the `Name`, `Amount`, and `Type` fields canno out in the **Add Transaction** section above also remain. + +#### Clear Transactions + +**Overview** + +The `clear_transactions` command deletes all existing `Transactions` from `TransactionList` in UniCash. + +The activity diagram of clearing all transactions is as shown below + + + +The following sequence diagram shows the interaction between different components of UniCa$h. + + + + +**Details** + +1. The user inputs the command to clear all transactions +2. The input will be parsed by `ClearTransactionsCommandParser` and if the provided input is +invalid (i.e. trailing arguments) `ParseException` will be thrown, and the +user is prompted to enter the command again with the correct input. +3. If the input is valid, a `ClearTransactionsCommand` object is created to be executed by `LogicManager` +4. `LogicManager` will invoke the `execute` method of `ClearTransactionsCommand` + which will invoke the `Model` object to be set with a new `UniCash` object, which + would contain an empty `TransactionList`. + +Here, it must be noted that unlike `DeleteTransactionCommand`, individual transactions in the `TransactionList` +are not deleted singularly. As opposed to iteratively deleting each transaction in the `TransactionList`, the more +efficient way to achieve the same effect would be to simply set the `Model` contained in `LogicManager` to a new +`UniCash` object, as the newly created `UniCash` object would now have an empty `TransactionList` encapsulated within. +This emulates the deletion of all transactions in the `TransactionList`. + +#### Get Transaction + +**Overview** + +The `get` command retrives an existing `Transaction` from `TransactionList` in UniCa$h. + +The activity diagram of retrieving a Transaction is as shown below + + + +The following sequence diagram shows the interaction between different components of UniCa$h. + + + +The above sequence diagram omits details on the filtering of `TransactionList` and assumes that +the displayed `TransactionList` is showing all transactions. However, the logic of the `GetCommand` +remains the same for all transaction retrieval. + +
+**Note:** The lifeline for `GetCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. +
+ +**Details** + +1. The user specifies the transaction to be retrieved by stating the appropriate index of the transaction. +2. The input will be parsed by `GetCommandParser` and if the provided input is invalid, `ParseException` will be thrown, + and the user is prompted to enter the command again with the correct input. +3. If the input is valid, an `Index` object is created with the given input integer, and passed into `GetCommand` to be executed + by `LogicManager` +4. `LogicManger` will invoke the `execute` method of `GetCommand` which will retrieve the `Transaction` from UniCa$h. + +
+You can refer to the `INDEX` constraints in [command breakdown's Argument Types section](UserGuide.md#argument-types) in the User Guide. +You can also refer to the [UI Layout's Transaction Card section](#transaction-card) to learn about the transaction index values that +can change based on the current `Transactions List` configuration. +
+ +#### Reset UniCa$h + +**Overview** + +The `reset_unicash` command overwrites the `TransactionList`with the default +UniCa$h `Transactions`. + +The activity diagram of resetting UniCa$h is as shown below + + + +The following sequence diagram shows the interaction between different components of UniCa$h. + + + +
+**Note:** The lifeline for `ResetCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. +
+ + +**Details** + +1. The user inputs the command to reset UniCa$h. +2. The input will be parsed by `ResetCommandParser` and if the provided input is + invalid (i.e. trailing arguments) `ParseException` will be thrown, and the + user is prompted to enter the command again with the correct input. +3. If the input is valid, a `ResetCommand` object is created to be executed by `LogicManager` +4. `LogicManager` will invoke the `execute` method of `ResetCommand` + which will invoke the `Model` object to be set with a sample `UniCash` object which would + contain a `TransactionList` populated with sample Transaction data. + +
+It must be noted here that resetting UniCa$h to its original state refers to overwriting +the internal `Transactions List` with the original transactions only, and does not refer to +clearing any contained `budgets` +
+ +#### Find Transactions + +**Overview** + +The `find` command searches UniCa$h for `Transactions` that match the input search parameters. + +The activity diagram of finding transactions in UniCa$h is as shown below + + + +The following sequence diagram shows the interaction between different components of UniCa$h +during the sequence of processing and execution of the `find` command + + + +
+**Note:** The lifeline for `FindCommandParser` should end at the destroy marker (X) but due to a +limitation of PlantUML, the lifeline reaches the end of diagram. +
+ + +**Details** + +1. The user inputs the command to search for transactions with specified parameters +2. The input will be parsed by `FindCommandParser` and if the provided input is + invalid, `ParseException` will be thrown, and the user is prompted to enter the +command again with the correct input. + - _You can refer to the User Guide for the input constraints for the `find` command [here](UserGuide.md#find-transactions)._ +3. If the input is valid, a `FindCommand` object containing a `Predicate` +is created by `FindCommandParser` to be executed by `LogicManager` +4. `LogicManager` will invoke the `execute` method of `FindCommand` + which will invoke the `Model` property to update its filtered transactions list +according to the predicate contained inside `FindCommand`. + +**Notes** +- Every transaction property that can be searched with the `find` command contains an associated property predicate._ +- For the `find` command, these predicates are "composed" by the `TransactionContainsAllKeywordsPredicate` class. +- This class simulates a composed predicate that represents a short-circuiting logical `AND` of all property +predicates. + - Encapsulated within the class is a list of transaction predicates. + - The overriding `test` method returns true only if the input `Transaction` +matches all predicates in this list, and a snippet of it is shown below. + + ```java + public boolean test(Transaction transaction) { + if (predicateList.isEmpty()) { + return false; + } + + return predicateList.stream() + .allMatch(predicate -> predicate.test(transaction)); + } + ``` + +- In summary, the `FindCommandParser` is responsible for parsing the user input and "converting" each input +into the associated property predicate, and then creating the `FindCommand` object itself with +the above-mentioned composed predicate class. + + + + ### Budget Management
@@ -1155,49 +1636,16 @@ expenses available or not. Also, the `showSummary` parameter will be set to `fal ### General Utility -#### Clear Transactions - -##### Overview - -The `ClearTransactionsCommand` deletes all existing `Transactions` from `TransactionList` in UniCash. - -The activity diagram of clearing all transactions is as shown below - - - -The following sequence diagram shows the interaction between different components of UniCash. - - - -**Note:** Given that `ClearTransactionsCommand` takes in no arguments, it does not have an associated Parser class -like the other `Command` classes. This is currently the case, however, given that the command entirely erases the -existing Unicash, a `ClearTransactionsCommandParser` is proposed to be implemented at a later date to ensure an -additional layer of safety for the User. - -##### Details - -1. The user inputs the command to reset unicash -2. A `ClearTransactionsCommand` object is created with no arguments. -3. `LogicManager` will invoke the `execute` method of `ClearTransactionsCommand` - which will replace the existing `Model` property with a new `UniCash` object which - would contain an empty `TransactionList`. - -Here, it must be noted that unlike `DeleteTransactionCommand`, individual transactions in the `TransactionList` -are not deleted singularly. As opposed to iteratively deleting each transaction in the `TransactionList`, the more -efficient way to achieve the same effect would be to simply set the `Model` contained in `LogicManager` to an new -`UniCash` object, as the newly created `UniCash` object would now have an empty `TransactionList` encapsulated within. -This emulates the iterative deletion of all transactions in the `TransactionList`. - #### Help -##### Overview +**Overview** The `help` command can be used in 2 different ways. 1. `help` with no arguments. 2. `help COMMAND_WORD` with 1 argument containing a command word. -##### Details +**Details** 1. `help` @@ -1214,14 +1662,9 @@ information on that command and provide instructions on how to run that command. This command will exit UniCa$h. -### User Interface [//]: # (#### etc) -### Minor Features - -#### Hash-based coloring - --- ### Appendix: Planned Enhancements @@ -1263,10 +1706,6 @@ We had to alter `ModelManager` and `UniCash` to contain the relevant `Transactio Additionally, removing all dependencies to the old AB3 architecture such as the `Person` model or `JsonAdaptedPerson` was a big challenge as we had to ensure that doing so did not cause any regression to the new models and classes. However, it was also a good exercise in revealing unintended dependencies between UniCa$h and the old AB3 models and classes. -#### Improving the UI - -[//]: # (TODO: Rubesh) - #### Providing Summary Statistics [//]: # (TODO: Ernest) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index f6a5ed18cd1..ca60ac9572a 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -607,8 +607,8 @@ of the transaction to be retrieved, as shown in the currently displayed `Transac
There are some important `INDEX` constraints for which you can refer to the [command breakdown's Argument Types section](#argument-types). You can also refer to the -[UI Layout's Transaction Card section](#transaction-card) to learn about the transaction index values that -can change based on the current `Transactions List` configuration. +[UI Layout's Transaction Card section](DeveloperGuide.md#transaction-card) in the Developer Guide +to learn about the transaction index values that can change based on the current `Transactions List` configuration.
##### Successful Execution @@ -1542,12 +1542,6 @@ It also cannot be followed with any arguments, options, or non-whitespace text.
-
-This command is subject to the filter applied by `find` or `get_total_expenditure` -commands, which you can read about under the `find` command section [here](#find-transaction) -or under the `get_total_expenditure` command section [here](#get-total-expenditure). -
-
While this command will restore the default UniCa$h transactions, the current `Transactions List` configuration is still subject to any filters applied by `find` or `get_total_expenditure`, diff --git a/docs/diagrams/unicash/ClearTransactionsActivityDiagram.puml b/docs/diagrams/unicash/ClearTransactionsActivityDiagram.puml index a0adc633b3b..25a6a05322d 100644 --- a/docs/diagrams/unicash/ClearTransactionsActivityDiagram.puml +++ b/docs/diagrams/unicash/ClearTransactionsActivityDiagram.puml @@ -7,7 +7,14 @@ start : User enters clear_transactions command; -: All transactions have been cleared; +if () then ([command followed with trailing characters]) + :Parse exception thrown; + stop + +else ([else]) + :All transactions cleared successfully; + +endif stop diff --git a/docs/diagrams/unicash/ClearTransactionsSequenceDiagram.puml b/docs/diagrams/unicash/ClearTransactionsSequenceDiagram.puml index 9a2189f8efd..74355478622 100644 --- a/docs/diagrams/unicash/ClearTransactionsSequenceDiagram.puml +++ b/docs/diagrams/unicash/ClearTransactionsSequenceDiagram.puml @@ -4,7 +4,9 @@ skinparam ArrowFontStyle plain box Logic LOGIC_COLOR_T1 participant ":LogicManager" as LogicManager LOGIC_COLOR -participant ":ClearTransactionsCommand" as ClearTransactionsCommand LOGIC_COLOR +participant ":UniCashParser" as UniCashParser LOGIC_COLOR +participant ":ClearTransactionsCommandParser" as ClearTransactionsCommandParser LOGIC_COLOR +participant "d:ClearTransactionsCommand" as ClearTransactionsCommand LOGIC_COLOR participant ":CommandResult" as CommandResult LOGIC_COLOR end box @@ -15,14 +17,36 @@ end box [-> LogicManager : execute("clear_transactions") activate LogicManager +LogicManager -> UniCashParser : parseCommand("clear_transactions") +activate UniCashParser + +create ClearTransactionsCommandParser +UniCashParser -> ClearTransactionsCommandParser +activate ClearTransactionsCommandParser + +ClearTransactionsCommandParser --> UniCashParser +deactivate ClearTransactionsCommandParser + +UniCashParser -> ClearTransactionsCommandParser : parse("") +activate ClearTransactionsCommandParser + create ClearTransactionsCommand -LogicManager -> ClearTransactionsCommand +ClearTransactionsCommandParser -> ClearTransactionsCommand activate ClearTransactionsCommand -ClearTransactionsCommand --> LogicManager +ClearTransactionsCommand --> ClearTransactionsCommandParser : deactivate ClearTransactionsCommand -LogicManager -> ClearTransactionsCommand : execute() +ClearTransactionsCommandParser --> UniCashParser : +deactivate ClearTransactionsCommandParser +'Hidden arrow to position the destroy marker below the end of the activation bar. +ClearTransactionsCommandParser -[hidden]-> UniCashParser +destroy ClearTransactionsCommandParser + +UniCashParser --> LogicManager : +deactivate UniCashParser + +LogicManager -> ClearTransactionsCommand : execute(model) activate ClearTransactionsCommand ClearTransactionsCommand -> Model : setUniCash(new UniCash()) @@ -38,7 +62,7 @@ activate CommandResult CommandResult --> ClearTransactionsCommand deactivate CommandResult -ClearTransactionsCommand --> LogicManager +ClearTransactionsCommand --> LogicManager : command result deactivate ClearTransactionsCommand [<--LogicManager diff --git a/docs/diagrams/unicash/DeleteTransactionActivityDiagram.puml b/docs/diagrams/unicash/DeleteTransactionActivityDiagram.puml index 42f6c0fa393..fd7357227ab 100644 --- a/docs/diagrams/unicash/DeleteTransactionActivityDiagram.puml +++ b/docs/diagrams/unicash/DeleteTransactionActivityDiagram.puml @@ -10,7 +10,7 @@ start if () then ([else]) :Parse exception thrown; stop -else ([Input is a valid number]) +else ([command argument is a valid number]) :Transaction successfully deleted ; endif diff --git a/docs/diagrams/unicash/DeleteTransactionSequenceDiagram.puml b/docs/diagrams/unicash/DeleteTransactionSequenceDiagram.puml index e0798461d6c..b7cfb69c650 100644 --- a/docs/diagrams/unicash/DeleteTransactionSequenceDiagram.puml +++ b/docs/diagrams/unicash/DeleteTransactionSequenceDiagram.puml @@ -46,10 +46,10 @@ destroy DeleteTransactionCommandParser UniCashParser --> LogicManager : d deactivate UniCashParser -LogicManager -> DeleteTransactionCommand : execute() +LogicManager -> DeleteTransactionCommand : execute(model) activate DeleteTransactionCommand -DeleteTransactionCommand -> Model : deleteTransaction (1) +DeleteTransactionCommand -> Model : deleteTransaction(transactionToDelete) activate Model Model --> DeleteTransactionCommand diff --git a/docs/diagrams/unicash/FindTransactionsActivityDiagram.puml b/docs/diagrams/unicash/FindTransactionsActivityDiagram.puml new file mode 100644 index 00000000000..96032e129c7 --- /dev/null +++ b/docs/diagrams/unicash/FindTransactionsActivityDiagram.puml @@ -0,0 +1,47 @@ +@startuml +!pragma useVerticalIf on +skin rose +skinparam ActivityFontSize 15 +skinparam ArrowFontSize 12 +start + +: User enters find command; + +if () then ( + +[command not followed by any parameters]) + :Error: Invalid command format; + stop + + +elseif () then ( + + + +[command followed by multiple +instances of the same parameter]) + + :Error: Multiple values specified for single-valued field ; + stop + +elseif () then ( + + +[command followed by +invalid parameters]) + + :Error: Invalid command format; + stop + + +else ( + + [else] +) + :Transaction retrieved successfully; + +endif + +stop + +@enduml diff --git a/docs/diagrams/unicash/FindTransactionsSequenceDiagram.puml b/docs/diagrams/unicash/FindTransactionsSequenceDiagram.puml new file mode 100644 index 00000000000..3270df8e3d8 --- /dev/null +++ b/docs/diagrams/unicash/FindTransactionsSequenceDiagram.puml @@ -0,0 +1,73 @@ + +@startuml +!include ../style.puml + +box Logic LOGIC_COLOR_T1 +participant ":LogicManager" as LogicManager LOGIC_COLOR +participant ":UniCashParser" as UniCashParser LOGIC_COLOR +participant ":FindCommandParser" as FindCommandParser LOGIC_COLOR +participant "command:FindCommand" as FindCommand LOGIC_COLOR +participant "commandResult:CommandResult" as CommandResult LOGIC_COLOR + +end box + +box Model MODEL_COLOR_T1 +participant ":Model" as Model MODEL_COLOR +end box + +[-> LogicManager : execute("find c/food") +activate LogicManager + +LogicManager -> UniCashParser : parseCommand("find c/food") +activate UniCashParser + +create FindCommandParser +UniCashParser -> FindCommandParser +activate FindCommandParser + +FindCommandParser --> UniCashParser +deactivate FindCommandParser + +UniCashParser -> FindCommandParser : parse("c/food") +activate FindCommandParser + + +create FindCommand +FindCommandParser -> FindCommand +activate FindCommand + +FindCommand --> FindCommandParser +deactivate FindCommand + +FindCommandParser --> UniCashParser : command +deactivate FindCommandParser + +FindCommandParser -[hidden]-> UniCashParser +destroy FindCommandParser + +UniCashParser --> LogicManager : command +deactivate UniCashParser + +LogicManager -> FindCommand : command.execute(model) +activate FindCommand + + +FindCommand -> Model : updateFilteredTransactionList(transactionPredicate) +activate Model + +Model --> FindCommand +deactivate Model + +create CommandResult +FindCommand -> CommandResult +activate CommandResult + +CommandResult --> FindCommand +deactivate CommandResult + +FindCommand --> LogicManager : commandResult +deactivate FindCommand + +[<--LogicManager : commandResult +deactivate LogicManager +@enduml diff --git a/docs/diagrams/unicash/GetTransactionActivityDiagram.puml b/docs/diagrams/unicash/GetTransactionActivityDiagram.puml new file mode 100644 index 00000000000..6a2fbcd9212 --- /dev/null +++ b/docs/diagrams/unicash/GetTransactionActivityDiagram.puml @@ -0,0 +1,20 @@ +@startuml + +skin rose +skinparam ActivityFontSize 15 +skinparam ArrowFontSize 12 +start + +: User enters get command; + +if () then ([else]) + :Parse exception thrown; + stop +else ([command argument is a valid number]) + :Transaction successfully retrieved ; +endif + + +stop + +@enduml diff --git a/docs/diagrams/unicash/GetTransactionSequenceDiagram.puml b/docs/diagrams/unicash/GetTransactionSequenceDiagram.puml new file mode 100644 index 00000000000..13b8e23f7cf --- /dev/null +++ b/docs/diagrams/unicash/GetTransactionSequenceDiagram.puml @@ -0,0 +1,70 @@ +@startuml +!include ../style.puml +skinparam ArrowFontStyle plain + +box Logic LOGIC_COLOR_T1 +participant ":LogicManager" as LogicManager LOGIC_COLOR +participant ":UniCashParser" as UniCashParser LOGIC_COLOR +participant ":GetCommandParser" as GetCommandParser LOGIC_COLOR +participant "d:GetCommand" as GetCommand LOGIC_COLOR +participant ":CommandResult" as CommandResult LOGIC_COLOR +end box + +box Model MODEL_COLOR_T1 +participant ":Model" as Model MODEL_COLOR +end box + +[-> LogicManager : execute("get 1") +activate LogicManager + +LogicManager -> UniCashParser : parseCommand("get 1") +activate UniCashParser + +create GetCommandParser +UniCashParser -> GetCommandParser +activate GetCommandParser + +GetCommandParser --> UniCashParser +deactivate GetCommandParser + +UniCashParser -> GetCommandParser : parse("1") +activate GetCommandParser + +create GetCommand +GetCommandParser -> GetCommand +activate GetCommand + +GetCommand --> GetCommandParser : +deactivate GetCommand + +GetCommandParser --> UniCashParser : +deactivate GetCommandParser +'Hidden arrow to position the destroy marker below the end of the activation bar. +GetCommandParser -[hidden]-> UniCashParser +destroy GetCommandParser + +UniCashParser --> LogicManager : +deactivate UniCashParser + +LogicManager -> GetCommand : execute(model) +activate GetCommand + +GetCommand -> Model : get(1) +activate Model + +Model --> GetCommand +deactivate Model + +create CommandResult +GetCommand -> CommandResult +activate CommandResult + +CommandResult --> GetCommand +deactivate CommandResult + +GetCommand --> LogicManager : result +deactivate GetCommand + +[<--LogicManager +deactivate LogicManager +@enduml diff --git a/docs/diagrams/unicash/ResetUniCashActivityDiagram.puml b/docs/diagrams/unicash/ResetUniCashActivityDiagram.puml new file mode 100644 index 00000000000..b4e6241cc8d --- /dev/null +++ b/docs/diagrams/unicash/ResetUniCashActivityDiagram.puml @@ -0,0 +1,21 @@ +@startuml + +skin rose +skinparam ActivityFontSize 15 +skinparam ArrowFontSize 12 +start + +: User enters reset_unicash command; + +if () then ([command followed with trailing characters]) + :Parse exception thrown; + stop + +else ([else]) + :UniCa$h successfully reset; + +endif + +stop + +@enduml diff --git a/docs/diagrams/unicash/ResetUniCashSequenceDiagram.puml b/docs/diagrams/unicash/ResetUniCashSequenceDiagram.puml new file mode 100644 index 00000000000..949f4ff7c02 --- /dev/null +++ b/docs/diagrams/unicash/ResetUniCashSequenceDiagram.puml @@ -0,0 +1,70 @@ +@startuml +!include ../style.puml +skinparam ArrowFontStyle plain + +box Logic LOGIC_COLOR_T1 +participant ":LogicManager" as LogicManager LOGIC_COLOR +participant ":UniCashParser" as UniCashParser LOGIC_COLOR +participant ":ResetCommandParser" as ResetCommandParser LOGIC_COLOR +participant "d:ResetCommand" as ResetCommand LOGIC_COLOR +participant ":CommandResult" as CommandResult LOGIC_COLOR +end box + +box Model MODEL_COLOR_T1 +participant ":Model" as Model MODEL_COLOR +end box + +[-> LogicManager : execute("reset_unicash") +activate LogicManager + +LogicManager -> UniCashParser : parseCommand("reset_unicash") +activate UniCashParser + +create ResetCommandParser +UniCashParser -> ResetCommandParser +activate ResetCommandParser + +ResetCommandParser --> UniCashParser +deactivate ResetCommandParser + +UniCashParser -> ResetCommandParser : parse("") +activate ResetCommandParser + +create ResetCommand +ResetCommandParser -> ResetCommand +activate ResetCommand + +ResetCommand --> ResetCommandParser : +deactivate ResetCommand + +ResetCommandParser --> UniCashParser : +deactivate ResetCommandParser +'Hidden arrow to position the destroy marker below the end of the activation bar. +ResetCommandParser -[hidden]-> UniCashParser +destroy ResetCommandParser + +UniCashParser --> LogicManager : +deactivate UniCashParser + +LogicManager -> ResetCommand : execute(model) +activate ResetCommand + +ResetCommand -> Model : setUniCash(getSampleUniCash()) +activate Model + +Model --> ResetCommand +deactivate Model + +create CommandResult +ResetCommand -> CommandResult +activate CommandResult + +CommandResult --> ResetCommand +deactivate CommandResult + +ResetCommand --> LogicManager : command result +deactivate ResetCommand + +[<--LogicManager +deactivate LogicManager +@enduml diff --git a/docs/images/unicash/UniCashHelpWindow.png b/docs/images/unicash/UniCashHelpWindow.png new file mode 100644 index 00000000000..276e032ed3b Binary files /dev/null and b/docs/images/unicash/UniCashHelpWindow.png differ diff --git a/docs/images/unicash/diagrams/ClearTransactionsActivityDiagram.png b/docs/images/unicash/diagrams/ClearTransactionsActivityDiagram.png new file mode 100644 index 00000000000..0718c7d97be Binary files /dev/null and b/docs/images/unicash/diagrams/ClearTransactionsActivityDiagram.png differ diff --git a/docs/images/unicash/diagrams/ClearTransactionsSequenceDiagram.png b/docs/images/unicash/diagrams/ClearTransactionsSequenceDiagram.png new file mode 100644 index 00000000000..e38a353ea98 Binary files /dev/null and b/docs/images/unicash/diagrams/ClearTransactionsSequenceDiagram.png differ diff --git a/docs/images/unicash/diagrams/DeleteTransactionActivityDiagram.png b/docs/images/unicash/diagrams/DeleteTransactionActivityDiagram.png new file mode 100644 index 00000000000..7418ba7dcf8 Binary files /dev/null and b/docs/images/unicash/diagrams/DeleteTransactionActivityDiagram.png differ diff --git a/docs/images/unicash/diagrams/DeleteTransactionSequenceDiagram.png b/docs/images/unicash/diagrams/DeleteTransactionSequenceDiagram.png new file mode 100644 index 00000000000..841f11c4513 Binary files /dev/null and b/docs/images/unicash/diagrams/DeleteTransactionSequenceDiagram.png differ diff --git a/docs/images/unicash/diagrams/FindTransactionsActivityDiagram.png b/docs/images/unicash/diagrams/FindTransactionsActivityDiagram.png new file mode 100644 index 00000000000..00b0a83e701 Binary files /dev/null and b/docs/images/unicash/diagrams/FindTransactionsActivityDiagram.png differ diff --git a/docs/images/unicash/diagrams/FindTransactionsSequenceDiagram.png b/docs/images/unicash/diagrams/FindTransactionsSequenceDiagram.png new file mode 100644 index 00000000000..c31d931b67b Binary files /dev/null and b/docs/images/unicash/diagrams/FindTransactionsSequenceDiagram.png differ diff --git a/docs/images/unicash/diagrams/GetTransactionActivityDiagram.png b/docs/images/unicash/diagrams/GetTransactionActivityDiagram.png new file mode 100644 index 00000000000..38119a7d6a5 Binary files /dev/null and b/docs/images/unicash/diagrams/GetTransactionActivityDiagram.png differ diff --git a/docs/images/unicash/diagrams/GetTransactionSequenceDiagram.png b/docs/images/unicash/diagrams/GetTransactionSequenceDiagram.png new file mode 100644 index 00000000000..ed53bc7ef86 Binary files /dev/null and b/docs/images/unicash/diagrams/GetTransactionSequenceDiagram.png differ diff --git a/docs/images/unicash/diagrams/ResetUniCashActivityDiagram.png b/docs/images/unicash/diagrams/ResetUniCashActivityDiagram.png new file mode 100644 index 00000000000..346210b3a4f Binary files /dev/null and b/docs/images/unicash/diagrams/ResetUniCashActivityDiagram.png differ diff --git a/docs/images/unicash/diagrams/ResetUniCashSequenceDiagram.png b/docs/images/unicash/diagrams/ResetUniCashSequenceDiagram.png new file mode 100644 index 00000000000..1c1893ac12d Binary files /dev/null and b/docs/images/unicash/diagrams/ResetUniCashSequenceDiagram.png differ diff --git a/docs/team/sp4ce-cowboy.md b/docs/team/sp4ce-cowboy.md index 9ba61c6449b..2fa86d00946 100644 --- a/docs/team/sp4ce-cowboy.md +++ b/docs/team/sp4ce-cowboy.md @@ -66,6 +66,7 @@ explanations in the respective PRs. _Note: The initial Find Command was implemented by [Jamie](https://github.com/jamz903) as mentioned [here](jamz903.md)_ + **User Interface Features** * **User Interface Overhaul & Enhancement** [PRs: @@ -109,6 +110,7 @@ explanations in the respective PRs. ([1](https://www.sciencedirect.com/science/article/abs/pii/S0167811623000599), [2](https://www.diva-portal.org/smash/record.jsf?pid=diva2%3A1788177&dswid=-2283)) studies that show positive correlation between color complexity and target user engagement, which is also elaborated in the DG._ +* **User Input Builder:** A utility class to facilitate the emulation of user input by `FxRobot` during Ui Testing. **Decommissioned Features** (Some features that I had implemented prior but removed due to various constraints) @@ -140,19 +142,19 @@ explanations in the respective PRs. **Documentation** * User Guide: - * Added documentation for own features (Delete, Clear, Reset, Find, Get, Help) - * Added annotated descriptions and overview of UI and UI Features + * Added documentation for own features (Delete, Clear, Reset, Find, Get) + * Added annotated descriptions and overview of UI * Developer Guide: * Migrated details of the DG from an external source (G Docs) and consolidated them in GitHub. * Set up DG skeleton for structured and convenient documentation by the team. - * Added documentation for own features (Delete, Clear, Reset, Find, Get, Help) - * Added documentation for UI and features (Command Box, Rolling Balance Indicator, Transactions Panel) + * Added documentation for own features (Delete, Clear, Reset, Find, Get) including UML diagrams. + * Added documentation for UI Layout & Features (including `StyleSheet class`) & also UI Testing features (`UserInputBuilder`) **Project Management & Team Tasks** * Created and initialized the CS2103-T16-3 organization on GitHub * Created a centralized meeting minutes repository for the team [here](https://docs.google.com/document/d/1EI2YeRjxt59N0oc0bauGXI06uFQLI_O54JJci_-JKGc/edit) -* Created a testing branch for in UniCa$h +* Created a test branch for convenient testing of UniCa$h by the team [PR: [#126](https://github.com/AY2324S1-CS2103-T16-3/tp/pull/126)] * Added a TestCommand for the above branch, intended for internal testing of UniCa$h. [PRs: [#126](https://github.com/AY2324S1-CS2103-T16-3/tp/pull/126)] @@ -161,12 +163,13 @@ explanations in the respective PRs. * Managed release [v1.3b](https://github.com/AY2324S1-CS2103-T16-3/tp/releases/tag/v1.3b) and [v1.3.1](https://github.com/AY2324S1-CS2103-T16-3/tp/releases/tag/v1.3.1) on GitHub, also made and released demo video for release v1.3b [here](https://github.com/AY2324S1-CS2103-T16-3/tp/releases/tag/v1.3b) +* Opened discussion for final consolidation of deliverables by the team [here](https://github.com/AY2324S1-CS2103-T16-3/tp/discussions/209) **Community** * **Pull Requests Reviewed**: Refer [here](https://github.com/AY2324S1-CS2103-T16-3/tp/pulls?q=is%3Apr+reviewed-by%3Asp4ce-cowboy) -[Reviewed 41 PRs, with 91 PR comments in total thus far.] +[Reviewed 51 PRs, with more than 91 PR comments in total.] * **Pull Requests Opened**: Refer [here](https://github.com/AY2324S1-CS2103-T16-3/tp/pulls?q=is%3Apr+author%3Asp4ce-cowboy+) -[Opened 33 PRs. Almost all major PRs have full details and/or screenshots.] +[Opened 41 PRs. Almost all major PRs have full details and/or screenshots.] * **Issues Assigned & Completed**: Refer [here](https://github.com/AY2324S1-CS2103-T16-3/tp/issues?q=is%3Aissue+author%3Asp4ce-cowboy+is%3Aclosed+)