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
andv1.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:
-
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. |
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
API :
Logic.java
-
Logic
uses theAllCommandsParser
class to parse the user command. -
This results in a
Command
object which is executed by theLogicManager
. -
The command execution can affect the
Model
(e.g. adding a product) and/or raise events. -
The result of the command execution is encapsulated as a
CommandResult
object which is passed back to theUi
.
Given below is the Sequence Diagram for interactions within the Logic
component for the execute("deleteproduct 1")
API call.
deleteproduct 1
Commandand the UI class diagram:
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 theModel
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
-
User requests to add distributors
-
Inventarie PRO adds the distributor into the list of distributors
Use case ends.
Use case: List distributor
MSS
-
User requests to list all distributors
-
Inventarie PRO shows the entire list of distributors
Use case ends.
Use case: Edit distributor
MSS
-
User requests to list all distributors
-
Inventarie PRO shows the entire list of distributors
-
User requests to edit a specific distributor by index
-
Inventarie PRO edits the specific distributor in the list of distributors
Use case ends.
Use case: Find distributor by name
MSS
-
User requests to find the distributor or distributors that have a certain name
-
Inventarie PRO shows the list of distributors with names that match the keyword given
Use case ends.
Use case: Find distributor by tag
MSS
-
User requests to find the distributor or distributors that have a certain tag
-
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
-
User requests to list all distributors
-
Inventarie PRO shows the entire list of distributors
-
User requests to view the products supplied by a specific distributor by index
-
Inventarie PRO lists the products supplied by the specific distributor in the list of distributors
Use case ends.
Use case: Delete distributor
MSS
-
User requests to list distributors
-
Inventarie PRO shows a list of distributors
-
User requests to delete a specific distributor in the list
-
Inventarie PRO deletes the product
Use case ends.