PROJECT: IchiFund


Overview

This portfolio documents my contributions towards the project, IchiFund, which is part of a software engineering module, CS2103T. My team decided to morph an existing address book software into a desktop finance management application for university students who prefer using a command-line interface. We call this application IchiFund.

My role was to develop the Budgets component and design the user interface for the application.

Summary of contributions

  • Major enhancement: Developed the Model, Logic, Storage, and Ui infrastructure for budgeting features.

    • Functionality: Provides the foundation on which features related to budget, such as add, delete, and find, are built upon.

    • Justification: The ability to read, create, delete, and find budgets on the application depends on the budget infrastructure. With this infrastructure in place, it is easy to implement and extend the budgeting features within IchiFund.

    • Highlights: This enhancement is part of the core features in IchiFund. The ability to implement this enhancement demonstrates a deep understanding of the underlying MVC design pattern of the original addressbook3 codebase. This is clearly highlighted when I introduced a Task abstraction to update all budgets upon an update of any transaction.

  • Minor enhancement:

    • Redesigned the user interface from bottom up (PR #131).

    • Added the ability to add transactions (PR #99).

    • Added the ability to delete transactions (PR #103).

    • Added the ability to find transactions (PR #163).

  • Code contributed: Click here to view the code that I have contributed.

  • Other contributions:

    • Project management:

    • Enhancements to existing features:

      • Modified the GUI (PR #131).

      • Wrote additional tests for budget features (PR #162).

    • Documentation:

      • Redesigned the logo for IchiFund (PR #244).

      • Redesigned the existing class diagrams for the developer guide (PR #144).

    • Community:

      • PRs reviewed (with non-trivial review comments): (PR #259).

      • Contributed to forum discussions here.

    • Tools:

      • Integrated Travis to the team repository.

      • Integrated a new Github plugin (SlackBot) to the team repository.

Contributions to the User Guide

Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users.

Creating monthly budget: add

Format: add de/DESCRIPTION a/AMOUNT [c/CATEGORY] [m/MONTH y/YEAR]

You can use the add command to create a budget. Let us first walk through the process of creating a budget for tracking your spending on food.

  1. Check to make sure you are in the budgets tab. If not, switch to it.

addbud1
  1. Type add de/Saving my tummy a/82.69 c/food into the command bar. This will create an $82.69 budget named Saving my tummy that tracks this month’s expenditures tagged with the food category.

If the optional arguments m/MONTH and y/YEAR are not provided, the budget will track all transactions.
addbud2
  1. Press enter to run the command. You should see the newly created budget on the budget list.

addbud3

If you want to track all monthly expenditures, simply leave out the c/CATEGORY argument. For instance, the following command creates a $500.00 budget that applies to all expenditures: add de/General budgeting a/500.

Deleting monthly budget: delete

Format: delete INDEX

You can use delete to delete a budget with a given index. Let us walk through the process of deleting the Saving my tummy budget we created previously.

  1. Identify the index of the budget you are deleting. Here, the index is 2.

deletebud1
  1. Type delete 2 into the command bar and press enter. You should see the Saving my tummy budget disappear from the list.

Finding monthly budget by keywords: find

Format: find [KEYWORDS]…​

You can use find to find budgets with description that matches all the given keywords. To illustrate this, let us suppose you want to find all budgets with saving in its description. To do so, type find saving into the command bar and press enter. You should see the search result on the budget list.

If you are unsure about which keywords the budget you are looking for contains, you can enter multiple keywords separated by space. IchiFund will return to you all results that match with at least one keyword.

You can also revert the budget list to show all budgets by executing find without any argument. To revert the budget list so that all budgets are listed, simply execute find without any argument.

Contributions to the Developer Guide

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.

Logic Component

LogicClassDiagram
Figure 1. Structure of the Logic Component

API : Logic.java

  1. Logic uses the IchiFundParser class to parse the user command.

  2. This results in a Command object which is executed by the LogicManager.

  3. The command execution can affect the Model (e.g. adding a person).

  4. The result of the command execution is encapsulated as a CommandResult object which is passed back to the Ui.

  5. In addition, the CommandResult object can also instruct the Ui to perform certain actions, such as displaying help to the user.

Given below is the Sequence Diagram for interactions within the Logic component for the execute("delete 1") API call.

DeleteSequenceDiagram
Figure 2. Interactions Inside the Logic Component for the delete 1 Command

Tasks

Some models in IchiFund must be refreshed after a command is executed. For instance, when a new Transaction is added, all Budget must be recomputed. Task can be used to facilitate such updates.

Implementation

This feature is managed by TaskManager. The role of TaskManager is to maintain a list of all active Task.

The LogicManager holds an instance of the TaskManager. When the LogicManager#execute() is called, the following chain of operations occurs:

  1. After Command#execute() is completed, TaskManager#executeAll() is called.

TaskCode
  1. TaskManager#executeAll() will iterate through all active Task and call the respective Task#execute() method.

Adding Budget

The add budget feature allows the user to add a budget into IchiFund. This feature is facilitated by BudgetFeatureParser, AddBudgetCommandParser, and AddBudgetCommand. The arguments supported by this feature includes:

  • Description

  • Amount

  • Category (optional)

  • Month (optional)

  • Year (optional)

Implementation

When the user input the add command in the Budget tab, the following chain of operations occurs:

  1. The IchiFundParser will delegate the parsing of the command to BudgetFeatureParser if the current active tab is Budget.

  2. The BudgetFeatureParser will delegate the parsing of the arguments to AddBudgetCommandParser.

  3. AddBudgetCommandParser#parse() will take in a String input consisting of the arguments.

  4. This arguments will be tokenized and the respective models for each argument are created.

  5. If the parsing of all arguments are successful, a new Budget object is created using the arguments, and a new AddBudgetCommand is returned back to LogicManager.

  6. The LogicManager executes AddBudgetCommand#execute().

  7. The newly created Budget is added to the model.

This process is further illustrated in the following sequence diagram:

AddBudgetSequenceDiagram
Figure 3. Sequence Diagram for add Command under Budget Tab