PROJECT: Inventarie PRO


Overview

Inventarie PRO is a desktop inventory application intended for use by self-employed provision shop owners who wish to digitise their inventory records. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

Summary of contributions

  • Major enhancement: Added the ability to manage distributors engaged with a provision shop

    • What it does: Allows the user to add, edit, delete and find distributors that the user would like a record of. It also allows the user to see which distributor provides what products for the shop.

    • Justification: This feature is an essential part of a digitised inventory management system, given that products which a self-employed provision shop owner wants to sell must have a source of supply (a distributor).

    • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands which other members were concurrently working on too.

  • Minor enhancement: I refactored some of the previous 'person' classes, methods and objects to a suitable 'product' name throughout the course of the project. I also edited some of the output messages to make them more suitable for our Inventarie PRO.

  • Code contributed: [Code Dashboard]

  • Other contributions:

    • Project management:

      • Managed releases v1.2.1, v1.3.1 and v1.3.2 (3 releases) on GitHub

    • Enhancements to existing features:

      • Increased functionality of find commands - finding products / distributors by their tag and not just by name (Pull request #182)

      • Updated the GUI to fit new features (distributor, transaction, reminder) (Pull requests #101 and #148) and removed the unnecessary browser panel (Pull request #180

      • Adapted existing tests to incorporate new features

    • Documentation:

      • Updated class diagrams for UI and Logic in the Developer Guide (Pull requests #187 and #189)

    • Community:

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

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.

Feature descriptions related to distributor functions:

Contacts

Add a distributor: adddistributor

Format: adddistributor dn/DISTRIBUTOR_NAME dp/PHONE_NUMBER t/TAG

Adds a distributor to the list of distributors engaged with the store.

Examples:

  • adddistributor dn/Ming Kee dp/98761234

  • adddistributor dn/Hak Kim dp/65900011

List all distributors: listdistributors

Format: listdistributors

Provides the list of distributors engaged with the store.

Edit a distributor: editdistributor

Format: editdistributor index dn/DISTRIBUTOR_NAME dp/PHONE_NUMBER

Edits details of the indexed distributor from the list of distributors engaged with the store. Index should be a positive number. The products that a distributor supplies cannot be edited.

Examples:

  • editdistributor 1 dn/Apple Farm Lok dp/93120000

Find a distributor: finddistributor

Format: finddistributor DISTRIBUTOR_NAME

Locates distributors that are related to the DISTRIBUTOR_NAME entered.

Examples:

  • finddistributor Farm

Find a distributor by tag: findtagdistributor

Format: findtagdistributor DISTRIBUTOR_TAG

Locates distributors that are related to the DISTRIBUTOR_TAG entered.

Examples:

  • findtagdistributor snack

See a list of products that a distributor can provide: listdistributorproducts

Format: listdistributorproducts index

Lists products that the indexed distributor from the list of distributors engaged with the store may supply. Index should be a positive number.

Examples:

  • listdistributorproducts 2

Delete a distributor: deletedistributor

Format: deletedistributor index

Deletes the indexed distributor from the list of distributors engaged with the store.

Examples:

  • deletedistributor 2
    Deletes the 2nd distributor in the contacts panel.

  • finddistributor Betsy
    delete 1
    Deletes the 1st distributor in the results of the find command.

Clear the distributor book: cleardistributors

Format: cleardistributors

Deletes all distributors from the distributor book.

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.

I updated: the Logic class diagram:

Logic component

LogicClassDiagram
Figure 1. Structure of the Logic Component

API : Logic.java

  1. Logic uses the AllCommandsParser 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 product) and/or raise events.

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

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

DeleteProductSdForLogic
Figure 2. Interactions Inside the Logic Component for the deleteproduct 1 Command

and the UI class diagram:

UiClassDiagram
Figure 3. Structure of the UI Component

API : Ui.java

The UI consists of a MainWindow that is made up of parts e.g.CommandBox, ResultDisplay, ProductListPanel, StatusBarFooter etc. All these, including the MainWindow, inherit from the abstract UiPart class.

The UI component uses JavaFx UI framework. The layout of these UI parts are defined in matching .fxml files that are in the src/main/resources/view folder. For example, the layout of the MainWindow is specified in MainWindow.fxml

The UI component,

  • Executes user commands using the Logic component.

  • Binds itself to some data in the Model so that the UI can auto-update when data in the Model change.

  • Responds to events raised from various parts of the App and updates the UI accordingly.

In the appendices, I included: the user stories related to product features:

|* * * |self-employed provision shop owner |see usage instructions |refer to instructions when I forget how to use the App

|* * * |self-employed provision shop owner |add a new product to my record of products | keep track of all the products that my shop owns

|* * * |self-employed provision shop owner |delete a product from my record of products | stop tracking products I no longer want to sell in my store

|* * * |self-employed provision shop owner |find a product by name | locate details of products without having to go through the entire list

|* * * |self-employed provision shop owner |find a product by relevant tags | retrieve a list of products that are of a certain type

,the user stories related to distributor features:

|* * * |self-employed provision shop owner |add a distributor to my record of distributors | keep track of who supplies my products to me

|* * * |self-employed provision shop owner |delete a distributor from my record of distributors | declutter the distributors I keep in contact with if I choose to stop business with a certain distributor

|* * * |self-employed provision shop owner |edit a distributor in my record of distributors | change the name or phone number of a distributor in case their details change, and keep up to date with their contacts

|* * * |self-employed provision shop owner |find a distributor by name | retrieve contact details of distributors without having to go through the entire list

|* * * |self-employed provision shop owner |find a distributor by relevant tags | retrieve a list of distributors who supply a certain type of products

|* * * |self-employed provision shop owner |view what products a distributor supplies | retrieve a list of all the products that a distributor supplies at one go, in case I need to make an order

and the use cases related to distributor features:

Use case: Add distributor

MSS

  1. User requests to add distributors

  2. Inventarie PRO adds the distributor into the list of distributors

    Use case ends.

Use case: List distributor

MSS

  1. User requests to list all distributors

  2. Inventarie PRO shows the entire list of distributors

    Use case ends.

Use case: Edit distributor

MSS

  1. User requests to list all distributors

  2. Inventarie PRO shows the entire list of distributors

  3. User requests to edit a specific distributor by index

  4. Inventarie PRO edits the specific distributor in the list of distributors

    Use case ends.

Use case: Find distributor by name

MSS

  1. User requests to find the distributor or distributors that have a certain name

  2. Inventarie PRO shows the list of distributors with names that match the keyword given

    Use case ends.

Use case: Find distributor by tag

MSS

  1. User requests to find the distributor or distributors that have a certain tag

  2. Inventarie PRO shows the list of distributors with tags that match the keyword given

    Use case ends.

Use case: List products supplied by a distributor

MSS

  1. User requests to list all distributors

  2. Inventarie PRO shows the entire list of distributors

  3. User requests to view the products supplied by a specific distributor by index

  4. Inventarie PRO lists the products supplied by the specific distributor in the list of distributors

    Use case ends.

Use case: Delete distributor

MSS

  1. User requests to list distributors

  2. Inventarie PRO shows a list of distributors

  3. User requests to delete a specific distributor in the list

  4. Inventarie PRO deletes the product

    Use case ends.