PROJECT: NUSSU Connect

NUSSU ConnectPNGBanner

Introduction

longdivider

This Portfolio is a documentation of the contributions that I have made for this project, titled NUSSU-Connect.

NUSSU-Connect is a resource management application targeting the members of the NUS Student Union (NUSSU). This application aims to simplify the tedious and time consuming management duties that an average club carries out. Hence the functions of our app are : Storing the details about every member of the NUSSU, facilitating a comprehensive search feature and financial logistics management, integrated in a platform that supports multi-level user access.

NUSSU-Connect aims to be an Efficient, Intuitive and most of all Secure application.

The original source code of this project is the AddressBook-Level4 project created by SE-EDU initiative, and hence, it also comes with some features from the AB4 project.

Summary of contributions

longdivider

My main contribution to this project is the Budgeting Feature. The intended purpose of this feature is to help the NUSSU treasurers allocate budgets fairly and equitably to all the clubs under the NUSSU based on the budget calculation data collected from the clubs.

The main aim of the budgeting feature is to boost the efficiency of one aspect of financial logistics management. Hence, the feature was designed keeping in mind ease of use for the users, and is an attempt to speed up one of the more tedious management duties performed by clubs.

I will further elaborate on my contributions in the following sections.

Major enhancement: added the ability for club members to submit data for budget calculation and calculation of the final budgets to be allocated

  • What it does: Allows the members of clubs to submit the data - the number of events that the club is planning to hold and the expected turnout of each of these events - for the calculation of their club’s budget using the budget command. Once data from all of the clubs has been collected NUSSU treasurers can use the calculatebudget command to calculate and allocate a fair and equitable budget for each of the clubs based on the total available budget.

  • Justification: Managing finances is one of the most important and time consuming functions of an organization. The budgeting feature implemented in NUSSU-Connect is a simple and less tedious alternative to the present budget allocation system in place in the NUSSU. This feature helps its users save on precious time, which can now be spent on other tasks which require their attention.

  • Highlights: The calculatebudget command was created almost entirely from scratch. The algorithm used to equitably calculate budgets is entirely my design.

Minor enhancement: added a feature that allows club members, NUSSU treasurers and club Presidents to view the budget allocated to a club

  • What it does: Using the viewbudget command, club members and NUSSU treasurers can enter the name of a club and view its budget.

  • Justification: This command is to be used by members of clubs to view the budget allocated to their club so that they can manage their club’s expenses accordingly. The main aim of the budgeting feature is to boost the efficiency of one aspect of

Other contributions:

  • Documentation:

    • Created a logo and banner for our project, NUSSU-Connect

    • Edited the README document with some of our product’s notable features.

    • Made cosmetic tweaks to the AboutUs, UserGuide and DeveloperGuide documents. (Pull Requests 56, 102, 103, 137, etc.)

    • Edited the class diagrams for Model and Storage to include the changes made with regards to the ClubBudgetElementsBook and FinalBudgetsBook.

  • Community:

    • Helped teammates edit variable and constant names in order to fit the naming conventions of the Java coding standard.

    • Made non-trivial comments on team member’s pull request (Pull request 122)

    • Identified functionality and documentation bugs in another team’s product (Issues 122, 114, 111, 100, 107, 102, and 118)

    • Helped a classmate from another project group implement a way to list items according to categories.

Contributions to the User Guide

longdivider

The following section will detail the budget allocation process while providing guidance to the users on how to use the commands that I have implemented. This section is my contribution to the User Guide. They showcase my ability to write documentation targeting end-users.

Budgeting feature: budget, calculatebudget and viewbudget

The budgeting process has 3 steps and involves club members and NUSSU treasurers as the users in the different steps

Step 1: Submitting the data for budget allocation which is to be done by club members.

Step 2: Calculating the budgets to be allocated which is to be done by NUSSU treasurers.

Step 3: Viewing the allocated budget of a club which can be done by either club members, NUSSU treasurers or club Presidents.

Submitting data for budget allocation: budget

This is the first step in the budgeting process!

This command allows you to submit the budget calculation data for your club - the name of your club, number of events your club is planning to host and the expected turnout of the events. Remember to be logged in with member credentials to gain access to this command!
Format: budget c/CLUB NAME t/EXPECTED TURNOUT e/NUMBER OF EVENTS

Example:
budget c/Computing Club t/200 e/5

CLUB NAME is case sensitive. Hence c/Computing Club and c/computing club will be treated as unique entries.

EXPECTED TURNOUT and NUMBER OF EVENTS must be postive whole numbers.

In the v1.4 budgetcommand does not undergo undoing and redoing as explained in the undo and redo commands. To make up for this an editbudget command is in works for v2.0 to allow users to edit the budget calculation data as required.

Calculating the budgets : calculatebudget

This is the second step in the budgeting process!

After all the clubs' budget calculation data has been submitted by the club members, you can log in with treasurer credentials and use this command to calculate and allocate budgets to all the clubs based on the total available budget you have specified
Format: calculatebudget b/TOTAL AVAILABLE BUDGET IN SGD

Example:
calculatebudget b/50000

Ensure that TOTAL AVAILABLE BUDGET is a positive whole number, i.e. it can also be zero.

Remember to only use the calculatebudget command once ALL the clubs' data has been collected since NUSSU-Connect only supports a one-time calculation of budgets in v1.4. In v2.0 users will be able to use the calculatebudget multiple times, as required.

Viewing the allocated budget for a club : viewbudget

This is the third and final step in the budgeting process!

This command shows you the budget allocated to the club that you have specified. Remember to be logged in with either member, treasurer or president credentials to have access to this command! Format: viewbudget c/CLUB NAME

Example:
viewbudget c/Computing Club

Contributions to the Developer Guide

longdivider

Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

Budgeting Feature

Current Implementation

This feature has been implemented through 3 separate commands, each dealing with a separate stage in the calculation and subsequent allocation of budgets by the NUSSU Executive Committee to all the clubs that submit the data required to calculate the budget. The three commands are: budget - which handles the submission of data by the club treasurer required to calculate the budget for that club, calculatebudget - which is to be used only by the NUSSU Executive Committee members in order to calculate the budgets for each club and viewbudget - which lists the final budgets of all the clubs.

Submission of Data

Given below is an example usage scenario and the behaviour at each step of the budget command.

Step 1. The user launches the application for the first time. 'filteredClubsList' will be initialised with an empty list of all the clubs' budget calculation data in the address book. Similarly 'filteredClubBudgets' will be initialised with an empty list of all the club budgets in the address book.

Step 2. The user (a club member) executes budget c/Computing Club t/200 e/5 command in order to submit the data for the calculation of her club’s budget. The 'LogicManager' then calls the 'parseCommand' in the 'AddressBookParser'.

Step 3. The 'AddressBookParser' then returns a new 'BudgetCommandParser', if the user is of the member role. (Else a parse exception is thrown.)

Step 4. The 'BudgetCommandParser' parses the command to be executed and creates a 'ClubBudgetElements' object called 'club' with the club’s name, the expected turnout and the number of events, as specified by the user. Finally the 'BudgetCommand' is called with 'club' as the argument.

Step 5. The 'BudgetCommand' checks whether the 'club' is a duplicate and if it is not, the 'BudgetCommand' calls the 'addClub' method in 'Model' with 'club' as the argument.

Step 6. 'Model' calls 'addClub' in 'ReadOnlyClubBudgetElementsBook' and indicates that the club budget elements book’s status has changed.

Step 7. 'ReadOnlyClubBudgetElementsBook' calls the 'addClub' command on an object 'clubs' of the 'UniqueClubsList' class, thus adding the required club’s data to the club budget elements book.

Step 8. Finally a success message is displayed with the details that have been entered by the user.

As mentioned in Step 5, had the user entered a club name that already existed in the list of clubs in the address book, then a duplicate club budget elements message would be shown, prompting the user to edit their entered command and try again. Execution of subsequent steps would be stopped until the user entered a unique club name.

The image below is the sequence diagram for the functioning of the budget command:

BudgetCommandSequenceDiagram
Calculation and allocation of budgets

Given below is an example usage scenario and the behaviour at each step of the calculatebudget command.

Step 1. 'filteredClubsList' will no longer be an empty list, and will now contain the budget calculation data of the clubs that have been added using the budget command.

Step 2. The user (a NUSSU treasurer) executes the calculatebudget b/50000 command with '50000' as the total available budget, in order to calulate and allocate all the clubs' budgets. The 'LogicManager' then calls the 'parseCommand' in the 'AddressBookParser'.

Step 3. The 'AddressBookParser' then returns a new 'BudgetCalculationCommandParser', if the user is of the role treasurer. (Else a parse exception is thrown.)

Step 4.'BudgetCalculationCommandParser' parses the command and creates a 'TotalBudget' object called 'totalBudget' with the total available budget specified by the user. Finally the 'BudgetCalculationCommand' is called with 'totalBudget' as the argument.

Step 5. The 'BudgetCalculationCommand' checks whether the 'totalBudget' is a negative number. It also checks whether the budgets have already been calculated before using the getHaveBudgetsBeenCalculated method of the 'BudgetCalculationManager'. It also checks whether the clubBudgetElementsBook is empty. If none of this are true, then the 'filteredClubsList' is iterated through to calculate the budget, an object 'toAdd' of the 'FinalClubBudget' class, of each club in the list. When the budget for a club has been calculated, the 'BudgetCalculationCommand' calls the 'addClubBudget' method in Model with 'toAdd' as the parameter.

Step 6. 'Model' calls 'addClubBudget' in 'ReadOnlyFinalBudgetBook' and indicates that the finalBudgetsBook’s status has changed.

Step 7. 'ReadOnlyFinalBudgetBook' calls the 'addClubBudget' command on an object 'clubBudgets' of the 'UniqueClubBudgetsList' class, thus adding the required club’s allocated budget to the finalClubBudgetsBook. The process repeats until the budget for every club in the 'filteredClubsList' has been calculated and allocated.

Step 8. Once the budget for every club has been allocated a success message is displayed, telling the user that the budgets have been calculated.

The image below is a sequence diagram for the 'BudgetCalculationCommand'

BudgetCalculationCommandSequenceDiagram
Viewing the allocated budgets

Given below is an example usage scenario and the behaviour at each step of the viewbudget command.

Step 1. 'filteredClubBudgetsList' will no longer be an empty list, and will now contain the final budgets that have been allocated to each of the clubs in the 'filteredClubsList'.

Step 2. The user (a NUSSU treasurer, a club member or even a club’s President) executes the viewbudget c/Computing Club command to view the budget allocated to the club that she has specified (in this case the Computing Club). The 'LogicManager' then calls the 'AddressBookParser'.

Step 3. The 'AddressBookParser' then returns a new ViewClubBudgetsCommandParser' if the user role is set to either member, treasurer or president.

Step 4. The 'ViewClubBudgetsCommandParser' then creates a 'ClubName' object called clubName. Finally the 'ViewClubBudgetsCommand' is called with 'clubName' as the argument.

Step 5. 'ViewClubBudgetsCommand' checks whether the budgets have been calculated already. If they have not, an error message is shown to the user. If they have, then the 'filteredClubBudgetsList' is looped through to find a 'FinalClubBudget' object with the same 'ClubName' as the 'clubName' that is specified by the user (in this case 'Computing Club'). If it is found, then the associated 'allocatedBudget' of that 'FinalClubBudget' object is displayed to the user. Else a message saying that the specified club’s budget does not exist is shown to the user.

The image below is a sequence diagram for the 'ViewClubBudgetsCommand'

ViewClubBudgetsCommandSequenceDiagram

Design Considerations

Aspect: How club budget elements data and final club budgets data is stored
  • Alternative 1 (current choice): Saving club budget elements data and final club budgets in budgetelements.xml and budgets.xml respectively in XML format.

    • Pros: It is easy to read.

    • Cons: XML data files takes up more storage space, also more verbose.

  • Alternative 2: Saving club budget elements data and final club budgets using JSON.

    • Pros: Faster and takes less storage space

    • Cons: Less intuitive or readable since items are presented in a manner that is more similar to the code.

Aspect: How the final club budgets are stored
  • Alternative 1 (current choice): Currently the final club budgets are stored in a list (which is accessed when using the viewbudget command).

    • Pros: Easier to implement, with respect to the project’s time constraints

    • Cons: Not a good choice with respect to time complexity. If the list of final club budgets is very large, then looping through it in worst case time complexity of O(N) to find the desired club’s budget, is very slow. Thus not allowing the NFR of speed to be achieved.

  • Alternative 2: Using a map to store the final club budgets

    • Pros: Far faster to search for the desired club’s final budget given that Club Names must be unique.

    • Cons: Would take longer to implement.

Possible Extensions

  • Implementing an editbudget command to allow the club members to edit the budget calculation data until the treasurers have calculated and allocated the budgets.

  • Allowing the NUSSU treasurers to calculate and allocate the budgets multiple times. This will allow them to change the total budget as and when needed and also allow club members to keep submitting their budget calculation data.