PROJECT: Bank Address Book


Overview

Bank Address Book (BankAB) is a business process management and workflow application platform, whereby its users are all the employees in a banking environment. This platform supports the basic daily routine of each employee such as:

  • Checking working schedule

  • Applying for leave application

  • Checking in and out during working hours

The managers and administrators will have higher priority access level of BankAB such as changing the priority level of the employee and approve or reject leave requests.

Summary of contributions

  • Major enhancement: Added the command to check in/out to/from work and calculates the salary per day according to the hours worked.

    • What it does: It allows users to check in to work or check out from work and based on the time they checked in and out, their salary per day will be calculated accordingly and displayed once they checked out from work.

    • Justification: This is a basic and crucial command required by a workflow management product as checking in/out to/from work is a daily process for employees to prove that they came to work and how long they have worked.

    • Highlights: This enhancement provides the product the checking in/out system. The implementation was challenging as it required creating a new command from scratch.

  • Minor enhancement:

    • added Working Rate field to specify each employee’s working rate per hour.

    • added Checked In Time field to specify the time that each employee’s checked in.

    • added checked in/out status display on UI.

  • Code contributed: RepoSense Dashboard

  • Other contributions:

    • Project management:

      • Managed vetting through and approving of pull requests.

    • Enhancements to existing features:

      • Added Working Rate and Checked In Time fields. (Pull request #92)

      • Updated checked in/out status colors on UI. (Pull requests #102)

    • Documentation:

      • Updated README.doc for the product. (Pull request #22)

      • Updated Developer Guide on checking in/out to/from work feature. Updated use cases and user stories as we refined our product through the weeks: #71

      • Ensuring the User Guide is up to date and details are correct for the listed commands as we refined our product through the weeks: #71, #94

    • Community:

      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)

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.

Check in/out working hours: check

Updates check in/out status for employees.
Format: check m/MODE
Examples:

  • check m/in

User checked in:

checkedInStatus

Checked in shows:

  • Checked in date

  • Checked in time

checkedIn
  • check m/out

User checked out:

checkedOutStatus

Checked out shows:

  • Checked out date

  • Checked out time

  • Hours worked

  • Salary per day according to employees' working rate per hour, both rounded off to 2 decimal places.

checkedOut

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.

Check in/out feature

Current implementation

The checkCommand is a command that allows employees to check in and out to work so that their working hours will be recorded according to the time they checked in/out and calculate their pay accordingly.

The checkCommand mechanism is facilitated by the AddressBookParser, which parses the user input to identify the requested command and calls the particular command parser to deal with the input arguments.

The checkCommandParser, which implements the Parser interface, parses the arguments inputted in to the CLI, and checks if the user input conforms the expected format.

  • Code snippet from checkCommandParser.java that shows the parsing of arguments,checking for invalid arguments and returning a checkCommand object:

public CheckCommand parse(String args) throws ParseException {
        requireNonNull(args);
            ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args, PREFIX_MODE);

            if (!arePrefixesPresent(argMultimap, PREFIX_MODE)
            || !argMultimap.getPreamble().isEmpty()) {
                throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, CheckCommand.MESSAGE_USAGE));
            }

            if (!didPrefixAppearOnlyOnce(args, PREFIX_MODE.toString())) {
                throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, CheckCommand.MESSAGE_USAGE));
            }

            Mode mode = ParserUtil.parseMode(argMultimap.getValue(PREFIX_MODE).get());

            return new CheckCommand(mode);
    }

In the second phase, the command is being executed in checkCommand. The result of checkCommand execution is encapsulated as a CommandResult object and returns it to the LogicManager and subsequently to the UI and display check in/out mode as one of the fields.

The sequence diagram below demonstrates the interaction within the Logic component of CheckCommand:

CheckCommandSequenceDiagram
Figure 1. Sequence diagram of CheckCommand