Overview: Something Daily

Something Daily is a desktop application using command-line interface. It is built up by three core components: To-do List, Expenditure Tracker and Calendar. This application allows user to add, delete or edit the task and expenditure. It also provides user with advanced features such as getting spending advice for following days and checking the tasks information and expenditure records of a particular day.

Something Daily is designed to help NUS SoC students to manage the significant number of academic tasks and keep track on daily expenditures. Moreover, it helps alleviate the inconvenience caused by switching between apps for example between Google Calendar and ExpensePoint as user could manage daily stuffs such as expenditures and tasks in one application.

This product was developed by a team of four, for more information about the rest developers, you may find it in the About Us page.

Summary of contributions

Given below are my contributions to this project.

  • Major enhancement:

    1. Designed models for Expenditure Tracker

      • What it does: Holds the data related to Expenditure Tracker and executes the commands in the lowest level.

      • Justification: It is the most foundational and core component of Expenditure Tracker in the app.

    2. Designed storage for Expenditure Tracker

      • What it does: Loads and stores the expenditure data via a particular path.

      • Justification: This component saves Expenditure Tracker’s data and hence allows user to keep track on expenditures.

    3. Designed user interface for Expenditure Tracker

      • What it does: Displays the history expenditures in the Expenditure Tracker panel properly.

      • Justification: This design allows user to view the expenditure records.

    4. Designed user interface for Calendar

      • What it does: Displays the Calendar properly.

      • Justification: This design gives user an overview of the whole month.

    5. Added the ability to add an expenditure

      • What it does: Allows the user to add expenditure to Expenditure Tracker.

      • Justification: This feature is the key to tracking daily expenditures, where user can add expenditures to Expenditure Tracker.

    6. Added the ability to get advice from Expenditure Tracker on how to spend money

      • What it does: Shows a popup window containing a summary of expenditure history and gives advice on how to spend money in the following period.

      • Justification: If the user has no idea on where he/she spent money and want to get some advice on managing money in the following period, this feature helps the users plan how to spend.

    7. Added the ability to view expenditures by date or category

      • What it does: Displays the expenditures on a particular day or of a specific category in the Expenditure Tracker panel.

      • Justification: Since user might not want to see all the expenditures from beginning till now, this feature improves the efficiency for user to navigate through expenditure records as user could view by a particular date or category.

    8. Added the ability to check tasks and expenditures on a particular day

      • What it does: Shows a popup window containing the task information and expenditure records of a particular day.

      • Justification: This feature implements the interoperability of Todo list and Expenditure Tracker as it provides user with both task information and expenditure records by referring to a specific date.

  • Minor enhancement:

    1. Added a PopUpString class and corresponding methods to pop up a window showing a particular string.

    2. Designed model class for Calendar, which generates the current month’s data and provides the data to be displayed to user.

    3. Wrote test files to check whether Expenditure Tracker models work properly, which helps developers find out the bugs and logic error in models.

    4. Set separate path for Expenditure Tracker storage.

    5. Modified improper Javadoc comment.

  • Code contributed: [RepoSense Dashboard]

  • Other contributions:

    • Documentation:

      • Wrote Expenditure Tracker features description to User Guide.

      • Wrote the user stories for the expenditure tracker under the Appendix section of the Developer Guide

      • Wrote the manual testing instructions for the expenditure tracker under the Appendix section of the Developer Guide

      • Wrote implementations for Calendar, Viewing expenditures and Get advice to Developer Guide.

    • Project Management:

    • Community:

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.

Adding an expenditure : ET_add

Adds an expenditure to Expenditure Tracker
Format: ET_add e/DESCRIPTION d/DATE m/MONEY c/CATEGORY

  • The format for e/DESCRIPTION must be of String format, it cannot be null or spaces.

  • The format for d/DATE must be DD-MM-YYYY, where DD refers to the date, MM refers to the month and YYYY refers to the year in numbers.

  • The m/MONEY field accepts both integer and floating point numbers.

  • The format for c/CATEGORY must be one of the following: Food, Drink, Clothing, Electronics, DailyNecessities, Sports, Communications, Travels, Study, Office, Pets, Gifts, Entertainment, Traffic, Shopping, Beauty, Furniture.

  • Duplicated expenses are allowed.

Examples:

  • ET_add e/Chicken rice d/12-09-2018 m/4.2 c/Food

Viewing expenditures : ET_view

Shows a filtered list of expenditures in the expenditure tracker.
Format: ET_view PARAMETER

  • PARAMETER is either DATE, CATEGORY or all.

  • The default view for the expenditure tracker upon starting up is all expenditures.

  • If DATE is used, the input must be in DD-MM-YYYY, where DD refers to the date, MM refers to the month and YYYY refers to the year in numbers.

  • If CATEGORY is used, the input must only be one of the following: Food, Drink, Clothing, Electronics, DailyNecessities, Sports, Communications, Travels, Study, Office, Pets, Gifts, Entertainment, Traffic, Shopping, Beauty, Furniture.

Examples:

  • ET_view 01-01-2018
    The list is now populated with expenditures of date 01-01-2018.

  • ET_view Electronics
    The list is now populated with expenditures of Electronics category.

  • ET_view all
    The list is now populated with all expenditures regardless of their date or category.

Getting advice for spending money : ET_advice

Gives a short summary of the expenditures made so far and provides advice on how to spend a particular amount of money in a given period of time.
Format: ET_advice m/MONEY numofdays/NUMBEROFDAYS

  • m/MONEY accepts both integer and floating point numbers.

  • numofdays/NUMBEROFDAYS only accepts integer which represents the number of days

Examples:

  • ET_advice m/1000 numofdays/25
    Gives a short summary of the expenditures made so far and provides advice on how to spend 1000 SGD in the following 25 days.

  • ET_advice m/240 numofdays/14
    Gives a short summary of the expenditures made so far and provides advice on how to spend 240 SGD in the following 14 days.

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.

Calendar

Current Implementation

Calendar uses both Model and UI components.

  • In Model part: The CalendarInfo class initializes a calendar for the current month and generates the index of the first day of the whole week.

  • In UI part: We create a gridpane as the template of the calendar and use setCalendar method of CalendarInfo class to set and fill components of the calendar user interface.

Aspect: Methods to support the calendar feature

  • Alternative 1 (current choice): Use the Calendar class in Java library to implement a calendar panel.

    • Pros: It is easy to create, no external library or API is needed and pulling data from to-do list and expenditure tracker will be feasible as well.

    • Cons: The appearance of calendar may not be that good.

  • Alternative 2: Use calendar API (Google Calendar)

    • Pros: The appearance will be better and the calendar will provide more dynamic features.

    • Cons: It needs more effort to integrate with our application and pull task and expenditure data from storage.

Here is an image of Google Calendar with other dynamic features provided. For example, user could click on a date and add an event, which is not supported by Java Calendar class by default.

GoogleCalendarImage

More dynamic features with mouse clicking for the calendar in Something Daily will be implemented in Version 2.0.

Viewing filtered expenditures feature

Current Implementation

Viewing expenditures in the Expenditure Tracker uses both Logic and Model components.

  • In Logic part: We use getPredicateShowExpendituresOnDate method of ViewExpenditureCommand class to get the predicate for a particular date, afterwards it is passed to updateFilteredExpenditureList method which will update the expenditure list shown to user. We use predicateShowExpendituresOfCategory method to get the predicate for a specific category, afterwards it is passed to updateFilteredExpenditureList method which will update the expenditure list shown to user.

  • In Model part: We use setPredicate method of FilteredList in ModelManager class to change the content of current expenditure list.

Aspect: Methods to support the viewing filtered expenditures feature

  • Alternative 1 (current choice): We iterate through the entire expenditure list and select the expenditures based on filter.

    • Pros: It is easy to implement, there is no need for sorting functions.

    • Cons: It needs to check all the expenditures in the list with time complexity O(n) which is relatively slow.

  • Alternative 2: We keep two expenditure lists sorted by date or category respectively.

    • Pros: It is faster to get the expenditures. We only need to find the first and last appearance of the date or category, all expenditures between start and end will be selected.

    • Cons: It is harder to implement and more storage are needed to maintain the two sorted lists.

Get advice

Current Implementation

Get advice uses both Logic and Model components.

  • In Logic part: The CommandResult method of ExpenditureGetAdviceCommand class calls getExpenditureRecords method of ModelManager class and stores the returned map. Afterwards, we use a string builder to create an advice to be shown to the user.

  • In Model part: We use getExpenditureRecords method of ExpenditureList class to create a map, where the key contains category and value contains total money spent on this category.

The following sequence diagram shows how the ET_advice operation works:

ExpenditureGetAdviceSequenceDiagram

Aspect: Methods to show the advice message

  • Alternative 1 (current choice): We generate the advice message using string builder and afterwards the message will be shown to user in a pop-up window.

    • Pros: It is user friendly. The content of advice will be shown clearly, which is easy for user to see.

    • Cons: It needs effort to implement a PopUpString class (in our cases, a self-implemented pop-up window will be easy to implement since only a string needs to be shown) and corresponding methods for UI activating in the ExpenditureGetAdviceCommand class.

  • Alternative 2: We show the advice message in the command result box.

    • Pros: It is easy to be implemented.

    • Cons: It is not user friendly and harder for user to view in the command result box which is relatively small.

Pop-up window

Current Implementation

A PopUpString class was implemented to trigger the pop-up process.

  • In PopUpString class: The popup method creates a new stage with a scene containing one label to hold the advice string. Afterwards, by using stage.show() method, a new window will appear.

Aspect: Styles of the pop-up window to be shown

  • Alternative 1 (current choice): A new normal window is shown

    • Pros: The style of window is normal which provides user with necessary information.

    • Cons: It needs effort to implement a PopUpString class.

  • Alternative 2: A dialog window is shown

    • Pros: It is easy to be implemented using JOptionPane class in Java library.

    • Cons: The style of window is dialog which might be a bit awkward and might mislead user to consider the content of this window as error message.