diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e59e52d37f6..a2e6a80fff2 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -4,16 +4,16 @@ title: Developer Guide --- * Table of Contents - * [**Acknowledgements**](#Acknowledgements) - * [**Setting up, getting started**](#Setting-up-getting-started) - * [**Design**](#Design) - * [Architecture](#Architecture) - * [UI component](#UI-component) - * [Logic component](#Logic-component) - * [Model component](#Model-component) - * [Storage component](#Storage-component) - * [Common classes](#Common-classes) - * [**Implementation**](#Implementation) + * [Acknowledgements](#acknowledgements) + * [Setting up, getting started](#setting-up-getting-started) + * [Design](#design) + * [Architecture](#architecture) + * [UI component](#ui-component) + * [Logic component](#logic-component) + * [Model component](#model-component) + * [Storage component](#storage-component) + * [Common classes](#common-classes) + * [Implementation](#implementation) * [\[Implemented\] Schedule feature](#implemented-schedule-feature) * [Proposed Implementation](#proposed-implementation) * [\[Implemented\] Contact archiving](#implemented-contact-archiving) @@ -21,33 +21,32 @@ title: Developer Guide * [\[Proposed\] Undo/redo feature](#proposed-undoredo-feature) * [Proposed Implementation](#proposed-implementation) * [Design considerations:](#design-considerations) - * [**Documentation, logging, testing, configuration, dev-ops**](#documentation-logging-testing-configuration-dev-ops) - * [**Appendix: Requirements**](#appendix-requirements) + * [Documentation, logging, testing, configuration, dev-ops](#documentation-logging-testing-configuration-dev-ops) + * [Appendix: Requirements](#appendix-requirements) * [Product scope](#product-scope) * [User stories](#user-stories) * [Use cases](#use-cases) * [Non-Functional Requirements](#non-functional-requirements) * [Glossary](#glossary) - * [**Appendix: Instructions for manual testing**](#appendix-instructions-for-manual-testing) + * [Appendix: Instructions for manual testing](#appendix-instructions-for-manual-testing) * [Launch and shutdown](#launch-and-shutdown) * [Deleting a person](#deleting-a-person) - * [Saving data](#saving-data) -------------------------------------------------------------------------------------------------------------------- -## **Acknowledgements** +## Acknowledgements * Calendar for Schedule feature adapted from: https://gist.github.com/Da9el00/f4340927b8ba6941eb7562a3306e93b6 -------------------------------------------------------------------------------------------------------------------- -## **Setting up, getting started** +## Setting up, getting started Refer to the guide [_Setting up and getting started_](SettingUp.md). -------------------------------------------------------------------------------------------------------------------- -## **Design** +## Design
@@ -218,7 +217,7 @@ Classes used by multiple components are in the `seedu.addressbook.commons` packa -------------------------------------------------------------------------------------------------------------------- -## **Implementation** +## Implementation This section describes some noteworthy details on how certain features are implemented. @@ -385,7 +384,7 @@ _{more aspects and alternatives to be added}_ -------------------------------------------------------------------------------------------------------------------- -## **Documentation, logging, testing, configuration, dev-ops** +## Documentation, logging, testing, configuration, dev-ops * [Documentation guide](Documentation.md) * [Testing guide](Testing.md) @@ -395,39 +394,43 @@ _{more aspects and alternatives to be added}_ -------------------------------------------------------------------------------------------------------------------- -## **Appendix: Requirements** +## Appendix: Requirements ### Product scope **Target user profile**: -* has a need to manage a significant number of part-time employee contacts and banking details -* has a need to track and schedule part-time employee work hours -* has a need to tabulate payroll for part-time employees with different pay rates +* has a need to manage a significant number of employee contacts and banking details +* has a need to track employee worked hours +* has a need to tabulate payroll for employees with different pay rates * prefer desktop apps over other types * can type fast * prefers typing to mouse interactions * is reasonably comfortable using CLI apps -**Value proposition**: manage part-time employee salary disbursement faster than a typical exel sheet with manual calculations. +**Value proposition**: manage employee salary disbursement faster than a typical exel sheet with manual calculations. ### User stories Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*` -| Priority | As a …​ | I want to …​ | So that I can…​ | -|-----------|----------------------------------------------------------------|----------------------------------------------|------------------------------------------------------------------------------| -| `* *` | new user | see a tutorial and usage instructions | familiarise with FnBuddy' features | -| `* * *` | user | add an employee contact with banking details | quickly access the employee's banking details for salary disbursement | -| `* * *` | user | delete an employee contact | remove entries that I no longer need | -| `* * *` | user | view all employee contacts | | -| `* *` | user | schedule an employee to work on a certain date | keep track of the employee's work schedule | -| `* *` | user with human error tendencies | retrieve an employee's calculated pay | avoid paying out an incorrect salary amount | -| `* *` | user | edit an employee contact details | keep the employee's details up to date | -| `*` | user with many employees | find employees contacts by name | locate the employee contact easily | -| `*` | user with potential returning employees | archive an employee contact | have the option to un-archive the employee's details when they return easily | -| `*` | user with many employees | filter employee contacts by tag(s) | identify which employee(s) are of that employment type | - +| Priority | As a …​ | I want to …​ | So that I can…​ | +|----------|----------------------------------------------------------------|----------------------------------------------------|-----------------------------------------------------------------------| +| `* *` | new user | see a tutorial and usage instructions | familiarise with FnBuddy' features | +| `* * *` | user | add an employee contact with banking details | quickly access the employee's banking details for salary disbursement | +| `* * *` | user | delete an employee contact | remove entries that I no longer need | +| `* * *` | user | view all employee contacts | | +| `* *` | user | track an employee's weekly worked hours | access it for employee salary calculation | +| `* *` | user handling employees with a variety of employment contracts | tag an employee contact with their employment type | retrieve the salary rate of the employee | +| `* *` | user with human error tendencies | retrieve an employee's calculated pay | avoid paying out an incorrect salary amount | +| `* *` | user | edit an employee contact details | keep the employee's details up to date | +| `* *` | user | schedule my employee shifts | plan workload more easily | +| `*` | user with many employees | sort employees contacts by name | locate the employee contact easily | +| `*` | user with potential returning employees | archive an employee contact | reopen the employee's details when they return easily | +| `*` | user with forgetfulness | search for contacts by keyword | find contacts without needing to provide their full name | +| `*` | user with many employees | filter employee contacts by tag(s) | identify which employee(s) are of that employment type | + +*{More to be added}* ### Use cases @@ -493,14 +496,14 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli Use case ends -**Use case: Schedule employee's shift** +**Use case: Track employee's work hours** **MSS** -1. User requests to add employee shift on specified date -2. FnBuddy requests employee contact and shift date +1. User requests to add employee's work hours +2. FnBuddy requests employee contact and work hours 3. User provides required information -4. FnBuddy adds employee shift on specified date +4. FnBuddy tracks the employee's work hours Use case ends. @@ -509,56 +512,17 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli * 2a. The contact book is empty. * 2a1. FnBuddy shows an error message. - Use case ends. - - -* 3a. The given contact information or shift date is invalid. - * 3a1. FnBuddy shows an error message. - - Use case resumes at step 2. - - -* 3b. The given shift date is in the past or too far in the future. - * 3b1. FnBuddy adds employee shift on specified date but will not be reflected in the UI calendar. - - Use case ends. - - -* 3c. The given shift date is already occupied by given contact. - * 3c1. No visible changes are made to the UI calendar. - - Use case ends. - -**Use case: Retrieve calculated employees' payroll** - -**MSS** - -1. User requests to retrieve payroll of all employees within specified date range -2. FnBuddy requests start and end date -3. User provides required information -4. FnBuddy calculates all employees' payroll within specified date range -5. FnBuddy displays list of all affected employees' payroll - - Use case ends. - -**Extensions** + Use case ends -* 1a. The contact book is empty. - * 1a1. FnBuddy shows an error message. - Use case ends. - +* 3a. The given contact information or working hours is invalid. -* 3a. The given start and end date is invalid. * 3a1. FnBuddy shows an error message. Use case resumes at step 2. -* 3b. No employees have worked within the specified date range. - * 3b1. FnBuddy shows an empty contact list. - - Use case ends. +*{More to be added}* ### Non-Functional Requirements @@ -573,13 +537,12 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli * **Mainstream OS**: Windows, Linux, Unix, MacOS * **Private contact detail**: A contact detail that is not meant to be shared with others -* **Bank Details**: Bank name followed by account number for salary disbursement, the valid digit length of the -account number is dependent on the bank it is registered to (eg. POSB accounts have 9 digits, OCBC accounts have 10 -digits). +* **Worked hours**: The number of hours an employee has spent working in a month +* **Bank Details**: Account number for salary disbursement, 7-11 digits in length. -------------------------------------------------------------------------------------------------------------------- -## **Appendix: Instructions for manual testing** +## Appendix: Instructions for manual testing Given below are instructions to test the app manually. @@ -604,25 +567,21 @@ testers are expected to do more *exploratory* testing. 1. Re-launch the app by double-clicking the jar file.
Expected: The most recent window size and location is retained. +1. _{ more test cases …​ }_ + ### Deleting a person 1. Deleting a person while all persons are being shown - 1. Prerequisites: List all persons using the `list all` command. Multiple persons in the list. + 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list. - 1. Test case: `delete 98765432`
- Expected: Contact with `phone` field = "98765432" is deleted from the list. Details of the deleted contact shown in the status message. + 1. Test case: `delete 1`
+ Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated. - 1. Test case: `delete 00000000`
+ 1. Test case: `delete 0`
Expected: No person is deleted. Error details shown in the status message. Status bar remains the same. 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)
Expected: Similar to previous. -### Saving data - -1. Dealing with missing/corrupted data files - - 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_ -