` object.
@@ -379,6 +387,8 @@ The `Meetings` component:
+ Assists in the **scheduling** of meetings
+ Lists the current availability and meetings
+
+
#### Forum
**API**: [`cooper.forum`](https://github.com/AY2122S1-CS2113T-W13-4/tp/tree/master/src/main/java/cooper/forum)
@@ -397,6 +407,8 @@ The `Forum` component:
[⬆️ Back to top](#whats-in-this-developer-guide)
+
+
### Storage Component
**API**: [`cooper.storage`](https://github.com/AY2122S1-CS2113T-W13-4/tp/tree/master/src/main/java/cooper/storage)
@@ -419,6 +431,8 @@ The `Storage` component:
[⬆️ Back to top](#whats-in-this-developer-guide)
+
+
### Util Component
**API**: [`Util.java`](https://github.com/AY2122S1-CS2113T-W13-4/tp/tree/master/src/main/java/cooper/util/Util.java)
@@ -434,6 +448,8 @@ This method is used to convert the `.tex` template files (located in `src/main/r
+
+
## Implementation
### Parsing user input
@@ -458,6 +474,8 @@ This gives great flexibility and extensibility to the `Parser` component as you
[⬆️ Back to top](#whats-in-this-developer-guide)
+
+
### Verifying user credentials
The `Verifier` class facilitates the verification of the credentials of a user registering or logging in to cOOPer.
@@ -503,12 +521,14 @@ This algorithm is recommended by the National Institute of Standards and Technol
[⬆️ Back to top](#whats-in-this-developer-guide)
+
+
### Requesting a resource
-`Resources` manages the access rights to other manager components like the `FinanceManager`, `MeetingManager` and `ForumManager`. The following sequence diagram shows the two main operations of `ResourcesManager`:
+The `Resources` component manages the access rights to other manager components like the `FinanceManager`, `MeetingManager` and `ForumManager`. The following sequence diagram shows the two main operations of `ResourcesManager`:
-+ To get a feature manager, such as the `FinanceManager`, user needs to pass in his `userRole`. `ResourcesManager` will check if the user has the right accessibility and either return the requested object, or a null.
-+ Storage class has "super privilege" to access internal data structure of `FinanceManager`, `MeetingManager` and `ForumManager`. Private members are passed safely using the *give-receive* pattern, instead of universal `getters`.
++ To get a feature manager, such as the `FinanceManager`, the user needs to pass in their `UserRole`. `ResourcesManager` will check if the user has the right access to the feature and returns the requested object if so, and `null` otherwise.
++ The `StorageManager` class has "super privilege" to access internal data structure of `FinanceManager`, `MeetingManager` and `ForumManager`. Private members are passed safely using the *give-receive* pattern, instead of universal `getters`.
![resourcesSequenceDiagram](developerGuideDiagrams/resourcesSequenceDiagram.png)
@@ -516,8 +536,10 @@ This algorithm is recommended by the National Institute of Standards and Technol
[⬆️ Back to top](#whats-in-this-developer-guide)
+
+
### Interacting with finance functions
-`Finance` provides features such as **adding** and **listing** of financial statements, such as the Balance Sheet and Cash Flow Statement as well as **compounded projection** of Free Cash Flow growth.
+The `Finance` component provides features such as **adding** and **listing** of financial statements, i.e. the balance sheet and cash flow statement as well as **compounded projection** of Free Cash Flow growth.
#### Adding to the financial statement
The sequence diagram below illustrates the process of **adding** to a given financial statement, in this case the balance sheet.
@@ -531,11 +553,13 @@ When the user wants to add an entry to a financial statement, `FinanceManager` w
#### Viewing the financial statement
When the user wants to view a financial statement with `list`, `FinanceManager` will run a check that the net amounts of each section of the financial statement are calculated correctly before the statement is displayed to the output.
-#### Generating cash flow projections
+#### Projecting cash flow
When the user wants to project free cash flow, `FinanceManager` will first help to calculate free cash flow by subtracting the CapEx (Capital Expenditure: a field of the cash flow statement) from the total cash from Operating Activities. Subsequently `FinanceManager` will compare this value to the previous year's value, and calculate the percentage increase. This percentage increase will then be used in a recursive [periodic compound interest](https://en.wikipedia.org/wiki/Compound_interest) formula to calculate the following year's free cash flow, at the same percentage increase.
[⬆️ Back to top](#whats-in-this-developer-guide)
+
+
### Generating a PDF from the financial statement
The [`PdfGenerator`](https://github.com/AY2122S1-CS2113T-W13-4/tp/blob/master/src/main/java/cooper/finance/pdfgenerator/PdfGenerator.java) abstract class is responsible for the generation of the financial statement as a PDF via the `generate` command. It is inherited by the subclasses, `BalanceSheetGenerator` and `CashFlowStatementGenerator`, with each subclass containing different methods to add different sections to the PDF.
@@ -581,6 +605,8 @@ This forms a long `String` which is then sent to the online LaTeX compiler via a
[⬆️ Back to top](#whats-in-this-developer-guide)
+
+
### Declaring an availability
The `MeetingManager` class facilitates the storing of availability in cOOPer.
@@ -604,13 +630,13 @@ The `MeetingManager` class facilitates the scheduling of meetings.
#### Scheduling process
When the user schedules a meeting `ScheduleCommand` checks if the `[date]` and `[time]` parameter is entered and calls `manualScheduleMeeting` in `MeetingManager` if it is and `autoScheduleMeeting` if it isn't.
-The following sequence diagram shows the process of **auto** scheduling a meeting. `username` of the user scheduling is `Sebastian` and `userInput` is `schedule Project Meeting /with Eugene`.
+The following sequence diagram shows the process of **automatically** scheduling a meeting. `username` of the user scheduling is `Sebastian` and `userInput` is `schedule Project Meeting /with Eugene`.
![autoScheduleSequenceDiagram](developerGuideDiagrams/autoScheduleSequenceDiagram.png)
-The following sequence diagram shows the process of **manual** scheduling a meeting. `username` of the user scheduling is `Sebastian` and `userInput` is `schedule Project Meeting /with Eugene /at 11-08-2021 14:00`.
+The following sequence diagram shows the process of **manually** scheduling a meeting. `username` of the user scheduling is `Sebastian` and `userInput` is `schedule Project Meeting /with Eugene /at 11-08-2021 14:00`.
![manualScheduleSequenceDiagram](developerGuideDiagrams/manualScheduleSequenceDiagram.png)
@@ -618,9 +644,11 @@ The following sequence diagram shows the process of **manual** scheduling a meet
[⬆️ Back to top](#whats-in-this-developer-guide)
+
+
### Interacting with the forum
-The following sequence diagram shows three operations with the forum. `addPost`, `commentPost` and `deletePost`.
+The following sequence diagram shows three operations with the forum, `addPost`, `commentPost` and `deletePost`.
+ For adding a post, `ForumManager` will create a new `ForumPost` object and store its username and content.
@@ -637,6 +665,7 @@ The following sequence diagram shows three operations with the forum. `addPost`,
[⬆️ Back to top](#whats-in-this-developer-guide)
+
### Saving and loading data
> ℹ️Due to the way the `Storage` component is implemented, the classes and methods used for storage have names which are quite similar. In order to generalize the explanations in this section for how data is saved and loaded, the term `XYZ` will be used as a placeholder where `XYZ` is `signInDetails`, `balanceSheet`, `cashFlowStatement`, `availability`, `meetings` and `forum`.
@@ -655,9 +684,9 @@ The following sequence diagram shows the general procedure of saving data to the
#### Loading data
-Data is loaded from cOOPer's storage files to the `Verification` and `Resources` component upon launching the app. The `StorageManager` constructor is first called and each subclass `XYZStorage` is initialized with the file paths of their storage files, `XYZ.txt`.
+Data is loaded from cOOPer's storage files into the `Verification` and `Resources` component upon launching the app. The `StorageManager` constructor is first called and each subclass `XYZStorage` is initialized with the file paths of their storage files, `XYZ.txt`.
The `loadAllData()` method of `StorageManager` is then called and this method in turn calls the `loadXYZ()` methods of the `XYZStorage` subclasses. If the storage files are not present upon launching cOOPer, the storage files will be created and any error in file creation will be made known to the user.
-Since data in the storage files are of a specific format, any change to the storage format will throw an `InvalidFileDataException` and a message will be printed for the user specifying the file containing invalid data.
+Since data in the storage files are of a specific format, any change to the storage format will throw an `InvalidFileDataException` and a message will be printed to specify the file containing invalid data.
The following sequence diagram shows the general procedure of loading data from the storage file upon launching cOOPer.
@@ -678,6 +707,8 @@ The following sequence diagram shows the general procedure of loading data from
+
+
## Appendix: Requirements
### Product scope
@@ -728,6 +759,8 @@ Example Users:
+
+
### Glossary
* *IDE* - Integrated Development Environment
@@ -771,6 +804,8 @@ Example Users:
2. Enter `help`.
**Expected output:** A list of commands specific to your role is shown along with their formats.
+
+
### Finance actions
1. Creating the balance sheet
1. Ensure that you are logged in as an *admin*.
@@ -804,6 +839,8 @@ Example Users:
3. Enter `proj [years]` to project up to your specified number of years.
**Expected output:** All the projected values of free cash flow will be displayed up to the specified year.
+
+
### Generating the PDF
The `generate` command works regardless of whether the prompt label is showing `[Balance Sheet]`, `[Cash Flow]` or is not even present.
@@ -820,6 +857,8 @@ The `generate` command works regardless of whether the prompt label is showing `
4. Enter `generate cf`.
**Expected output**: A message informing you that the PDF has been successfully generated is shown. A PDF named 'CashFlowStatement.pdf' is created in a folder named 'output' in the folder containing the JAR file.
+
+
### Meetings actions
1. Declaring availability
1. Ensure that you are logged in to cOOPer.
@@ -840,6 +879,8 @@ The `generate` command works regardless of whether the prompt label is showing `
2. Enter `meetings`.
**Expected output:** A table with all your meetings, their date and time, and their attendees is shown.
+
+
### Forum actions
1. Adding a post
1. Ensure that you are logged in to cOOPer.
@@ -861,11 +902,12 @@ The `generate` command works regardless of whether the prompt label is showing `
3. Enter `post list all`.
**Expected output**: A box containing all posts and comments you have entered so far is shown.
+
+
### Logging out
1. Logging out
1. Ensure that you are logged in to cOOPer.
2. Enter `logout`.
**Expected output**: A message informing you that you have logged out of cOOPer is shown along with the instructions on how to log in, register or exit. The label at the command prompt now shows `[Logged out]`.
-
[⬆️ Back to top](#whats-in-this-developer-guide)
diff --git a/docs/UserGuide.md b/docs/UserGuide.md
index 4cc8f1fcba..e7cb44b1e1 100644
--- a/docs/UserGuide.md
+++ b/docs/UserGuide.md
@@ -34,17 +34,16 @@ This section helps you navigate the guide.
- [Getting Started](#getting-started)
- [How cOOPer is to be used](#how-cooper-is-to-be-used)
- [Roles](#roles)
- - [User registration](#user-registration)
-- [Login](#login)
+ - [Registration](#registration)
+- [Logging In: `login`](#logging-in-login)
- [Features for All Users](#features-for-all-users)
- [Adding a forum post: `post add`](#adding-a-forum-post-post-add)
- [Viewing a post / posts in the forum: `post list`](#viewing-a-post--posts-in-the-forum-post-list)
- [Commenting on a forum post: `post comment`](#commenting-on-a-forum-post-post-comment)
- [Deleting a forum post: `post delete`](#deleting-a-forum-post-post-delete)
- [Declaring available timings for meetings: `available`](#declaring-available-timing-for-meetings-available)
- - [Viewing users available at different timings: `availability`](#viewing-users-available-at-different-timings-availability)
+ - [Viewing users available at different timings: `availability`](#viewing-which-users-are-available-at-different-timings-availability)
- [Viewing scheduled meetings: `meetings`](#viewing-scheduled-meetings-meetings)
- - [Logging out: `logout`](#logging-out-logout)
- [Admin Features](#admin-features)
- [Creating the balance sheet: `bs` → `add`](#creating-the-balance-sheet-bs--add)
- [Creating the cash flow statement: `cf` → `add`](#creating-the-cash-flow-statement-cf--add)
@@ -55,7 +54,8 @@ This section helps you navigate the guide.
- [Scheduling meetings with different users: `schedule`](#scheduling-meetings-with-different-users-schedule)
- [Employee Features](#employee-features)
- [Viewing Help: `help`](#viewing-help-help)
-- [Exiting the Program: `exit`](#exiting-the-program-exit)
+- [Logging Out: `logout`](#logging-out-logout)
+- [Exiting cOOPer: `exit`](#exiting-cooper-exit)
- [cOOPer's Data Storage](#coopers-data-storage)
- [Coming Soon](#coming-soon)
- [FAQ](#faq)
@@ -158,6 +158,7 @@ You are now ready to use cOOPer! Refer to the [Getting Started](#getting-started
## Getting Started
+
This section explains how you can register an account with cOOPer in order to gain access to cOOPer's features.
### How cOOPer is to be used
@@ -173,7 +174,7 @@ This section explains how you can register an account with cOOPer in order to ga
- cOOPer offers tailor-made functions and features specific to your role to ensure the correct level of administrative access within the company throughout cOOPer's usage.
-### User registration
+### Registration
- Upon first-time use of cOOPer, ensure that all members of the startup are registered with the correct role.
- Once a member has been registered, they will be able to log in to cOOPer to access its features.
@@ -181,7 +182,7 @@ This section explains how you can register an account with cOOPer in order to ga
- How to register a user:
1. When you see the `[Logged out]` label beside cOOPer's prompt, enter `register [username] /pw [password] /as [role]`.
2. Upon successful registration, you should see a message informing you of your successful registration.
- 3. You can now log in to access cOOPer's features specific to your role. Refer to the [Login](#login) section to find out more about logging in.
+ 3. You can now log in to access cOOPer's features specific to your role. Refer to the [Logging In](#logging-in-login) section to find out more about logging in.
> ℹ️`[username]` refers to your name, `[password]` refers to your password, while `[role]` refers to your role as determined [here](#roles).
@@ -204,8 +205,11 @@ Sebastian is now successfully registered as an admin!
[⬆️ Back to top](#whats-in-this-user-guide)
-## Login
-- Once you are successfully [registered](#user-registration), you can now log in to access cOOPer's features.
+
+
+## Logging in: `login`
+- Logs you in to cOOPer to access cOOPer's features.
+- You must be [registered](#registration) in order to log in.
- How to log in:
1. When you see the `[Logged out]` label beside cOOPer's prompt, enter `login [username] /pw [password] /as [role]`.
2. You should see a message informing you of your successful login. The `[Logged out]` label is no longer present beside the prompt.
@@ -235,7 +239,7 @@ You are now logged in successfully as Sebastian!
## Features for All Users
-This section explains cOOPer's features for all users, regardless of your role. These features are accessible to you only **after** you have successfully [logged in](#login).
+This section explains cOOPer's features for all users, regardless of your role. These features are accessible to you only **after** you have successfully [logged in](#logging-in-login).
@@ -464,33 +468,6 @@ Here are your meetings for today:
[⬆️ Back to top](#whats-in-this-user-guide)
-
-
-### Logging out: `logout`
-- Logs you out of your account.
-- You will now see the `[Logged out]` label beside cOOPer's prompt.
-
-- Example input:
-
-```
->> logout
-```
-
-- Expected output:
-
-```
-=========================================================================
-You are now logged out!
-To log in, enter "login [yourUsername] /pw [password] /as [yourRole]".
-To register, enter "register [yourUsername] /pw [password] /as [yourRole]".
-
-To exit, enter "exit".
-=========================================================================
->> [Logged out]
-```
-
-[⬆️ Back to top](#whats-in-this-user-guide)
-
## Admin Features
@@ -693,7 +670,7 @@ Proceeds from Issuing Debt 300
Dividends Paid 200
Net Cash from Financing Activities: 500
-----FREE CASH FLOW-----
-Free Cash Flow 3000
+Last year's Free Cash Flow 3000
=========================================================================
```
@@ -717,7 +694,8 @@ Free Cash Flow 3000
```
=========================================================================
-At your current rate of profitability growth in Free Cash Flow, these are future year's projections:
+At your current rate of profitability growth in Free Cash Flow, these are
+future year's projections:
1 year: 4083
2 year: 4763
3 year: 5557
@@ -745,7 +723,7 @@ After 3 years you can expect Free Cash Flow of 5558
```
=========================================================================
-The pdf file has been successfully generated!
+The PDF file has been successfully generated!
=========================================================================
```
@@ -784,7 +762,7 @@ The pdf file has been successfully generated!
> ℹ️You do not have to enter your own `[username]` as cOOPer assumes you are in the meeting that you want to schedule.
> ℹ️There is no limit to the number of `[username]`s you can enter. cOOPer supports scheduling a meeting with a large number of users. However, a large number of users may **slow** cOOPer down.
-> 💡 Before you do a manual schedule, you may want to check the [`availability`](#viewing-users-available-at-different-timings-availability) table for better success rates.
+> 💡 Before you do a manual schedule, you may want to check the [`availability`](#viewing-which-users-are-available-at-different-timings-availability) table for better success rates.
> ⚠️`[date]` has a format of **dd-MM-yyyy**, similar to the format [`available`](#declaring-available-timing-for-meetings-available) uses. Any other format will **not** be accepted and will result in incorrect behaviour.
> ⚠️`[time]` has a format of **HH:mm**, in *24-hour clock*, similar to the format [`available`](#declaring-available-timing-for-meetings-available) uses. Any other format will **not** be accepted and may result in incorrect behaviour.
@@ -792,7 +770,7 @@ The pdf file has been successfully generated!
- Example input for **automatically** scheduling a meeting:
```
->> schedule Progress Meeting /with Eugene
+>> schedule PR /with Eugene
```
- Expected output:
@@ -800,14 +778,15 @@ The pdf file has been successfully generated!
```
=========================================================================
Success!
-You have scheduled a <