1. Overview

Hello! My name is Zul and I’m a student at National University of Singapore (NUS). My future hope is to be a good developer. To start off my software developer path, I have developed a desktop application called Inventory Manager as part of an NUS Software Engineering module project. This portfolio provides you with information about various contributions that I have done for the project. This project is a small sample of the multiple talents that I have that will contribute to my future employment.

Inventory Manager is an inventory management solution aims to tackle the chore of stock taking for Small to Medium Enterprises (SMEs). Designed to be easy to use, Inventory Manager gives the users control over their business right from their keyboard.

Inventory Manager also allows users to perform multiple inventory management tasks such as creating sales, generating reports, creating purchase orders and more. With user authentication put in place, it gives SMEs greater control over users' access to the application as well.

2. Summary of Contributions

  • Major Enhancement: Added the Purchase Orders Management Feature

    • What it does: This feature allows the user to generate purchase order in the application. When a purchase order is approved by the manager, Inventory Manager will automatically update the stocks in the inventory.

    • Justification: This feature allows user to restock item easily and manage the purchase order details efficiently. It also tackles the issue of the hassle of writing hard-copy purchase orders.

    • Highlights: This feature is dependant of the item storage as purchase order can only be created on existing items. It is also tied with user management as only manager can approve/reject a purchase order. Deleting and editing an item must now update the relevant purchase orders as well.

  • Minor Enhancement: Rearranged the command box to the bottom of the Inventory Manager User Interface

    • Justification: This enhancement provides a more user friendly visual for the user.

  • Other Contributions:

    • Project Management:

      • Maintained issue tracker, milestone, pull request approval and merger.

      • Managed release V1.3 on GitHub.

    • Documentation:

      • Updated the user guides of Purchase Order Management component in Inventory Manager (Pull request #150)

      • Updated the developer guides of Purchase Order Management component in Inventory Manager (Pull request #150)

      • Updated the team’s about us page (Pull request #150)

      • Updated the storage and Ui class diagram in develop guide (Pull request #208)

    • Community:

      • Reviewed project done by other group and suggested improvements based on the bugs found. (W17-1 Issue #249)

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.

3.1. Purchase Orders Management

The following commands are used to manage purchase order.

3.1.1. Listing all purchase order : list-po

The list-po command is only available to the Member group.
It allows the user to list all purchase orders in Inventory Manager.

The screenshot below shows the result after the list-po command is entered.

doc list po
Figure 1. All purchase orders in Inventory Manager listed on screen.

Format: list-po

3.1.2. Adding a purchase order : add-po

The add-po command is only available to the Member group.
It allows the user to add a purchase order for an item based on it’s sku.
The added purchase order comes with a default status of 'PENDING' as shown in the figure below.

doc add po
Figure 2. A newly added purchase order that comes with a default 'PENDING' status._

Format: add-po s/SKU_NUMBER q/QUANTITY d/REQUIRED_DATE sp/SUPPLIER

Examples:

  • add-po s/apple-iphone-xr q/1000 d/2018-12-12 sp/Apple Inc

  • add-po s/samsung-s9 q/12 d/2101-12-12 sp/Samsung

3.1.3. Approving a purchase order : approve-po

The approve-po command is only available to the Manager.
It allows the manager to approve the specified purchase order from the purchase order list.
Upon approving, the quantity stated in the purchase order will be added to the designated item.

Format: approve-po INDEX

For the approve-po command, do take note of the following points:

  • Approves the purchase order at the specified INDEX.

  • The index refers to the index number shown in the displayed inventory list.

  • The index must be a positive integer 1, 2, 3, …​

  • The command can only be applied to purchase order with 'PENDING' status.

Example:

  • list-po
    approve-po 1
    Approves the first purchase order in the purchase order list.

3.1.4. Rejecting a purchase order : reject-po

The reject-po command is only available to the Manager.
It allows the manager to reject the specified purchase order from the purchase order list.

Format: reject-po INDEX

For the reject-po command, do take note of the following points:

  • Rejects the purchase order at the specified INDEX.

  • The index refers to the index number shown in the displayed inventory list.

  • The index must be a positive integer 1, 2, 3, …​

  • The command can only be applied to purchase order with 'PENDING' status.

Example:

  • list-po
    reject-po 1
    Rejects the first purchase order in the purchase order list.

3.1.5. Editing a purchase order : edit-po

The edit-po command is only available to the Member group.
It allows the user to edit the specified purchase order from the purchase order list.

Format: edit-po INDEX [q/QUANTITY] [d/REQUIRED_DATE] [sp/SUPPLIER]

For the edit-po command, do take note of the following points:

  • At least one of the optional fields must be provided.

  • Existing values will be updated to the input values.

  • Item’s SKU in the purchase order list is uneditable.

  • The command can only be applied to purchase order with 'PENDING' status.

Example:

  • edit-po 1 q/999 d/2018-12-12
    Updates the quantity and required date of the 1st purchase order to 999 and 2018-12-12 respectively.

3.1.6. Deleting a purchase order : delete-po

The delete-po command is only available to the Member group.
It allows the user to delete the specified purchase order from the purchase order list.

Format: delete-po INDEX

For the delete-po command, do take note of the following points:

  • Deletes the purchase order at the specified INDEX.

  • The index refers to the index number shown in the displayed purchase order list.

  • The index must be a positive integer 1, 2, 3, …​

Example:

  • list-po
    delete-po 5
    Deletes the 5th purchase order in the inventory.

4. 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.

4.1. Purchase order management

Purchase order management is introduced in Inventory manager to allow user to restock item easily and manage the purchase order details efficiently.

The purchase order details includes the item’s SKU, restock quantity, required date and supplier.
Purchase order can only be added if it matches the item’s SKU. Newly added purchase order comes with a default PENDING status which subsequently can be edited, approved, rejected and deleted.

4.1.1. Implementation

Model component

Purchase orders are maintained in the Model in a NonUniquePurchaseOrderList, allowing non unique purchase order among the stored individual purchase orders. The UML diagram is as shown in the figure below.

PoModel1
Figure 3. UML diagram showing representation of NonUniquePurchaseOrderList in Inventory Manager.

Individual purchase order are represented by the PurchaseOrder object with attributes Sku, Quantity, RequiredDate and Supplier. The class relationship is shown in Figure 11 below.

PoModel2
Figure 4. UML diagram showing representation of Purchase Order in Inventory Manager.
Storage component

Purchase orders are stored in XmlAdaptedPurchaseOrder objects, which maintain a class relationship as shown in the diagram below:

PoStorage
Figure 5. PurchaseOrder objects are saved using XmlAdaptedPurchaseOrder objects as shown above.

To save the XmlAdaptedPurchaseOrder objects created, it is stored in a plain text file following the XML format.
An example purchase order stored in XML format is reproduced below:

<purchaseOrders>
                <sku>apple-iphone-xr</sku>
                <quantity>1000</quantity>
                <reqDate>2018-12-12</reqDate>
                <supplier>Apple Inc.</supplier>
                <status>APPROVED</status>
</purchaseOrders>
UI component

The main window contains a ListPanel, which is interchangeable to display any list based on the command entered. Purchase order list is shown in the ListPanel upon executing list-po. Individual purchase orders are represented using PurchaseOrderCards that contains the attributes fields using labels and flowPanes.

The diagram below shows how purchase order panel is integrated in the Ui class diagram.

PoUi
Figure 6. Example of the a purchase order card in Inventory Manager UI.
Logic component

The following commands were added to handle the purchase order:

  • list-po : List all purchase orders

  • add-po : Add a purchase order

  • delete-po : Delete a purchase order

  • approve-po : Approve a purchase order

  • reject-po : Reject a purchase order

  • edit-po : Edit a purchase order

The following diagram details the class relationship for the Purchase order Commands.

PoCommand
Figure 7. UML Diagram depicting the class relationship between command classes.

Operations performed on purchase orders follow the sequence of operations described in the diagram below.

  1. Command input is received by the UI component.

  2. The command execution is handled by the Logic component.

  3. The changes to data are effected by the Model component.

  4. The new Inventory Manager data is saved by the Storage component.

This sequence of events is summarized in the following sequence diagrams:

PoList
Figure 8. A high level sequence diagram showing events triggered by the list-po command.
PoAdd
Figure 9. A high level sequence diagram showing events triggered by the add-po command.

4.1.2. Design considerations

Aspect: Implementation of purchase order commands that requires the item to be updated.
Commands such as approve-po will update the item quantity upon approval. Consequently, there are various places where updateItem can be executed. The pros and cons for each option is shown below.

Alternative 1 (current choice): Executed at Logic
Pros: Allows the user to get the item list from the model directly; less hassle.
Cons: Complicates the test cases as everything is done in one method.

Alternative 2: Executed at Model
Pros: Allows the user to call the item directly from the list that is stored in the model.
Cons: Requires additional method in the model which in turns requires to update 4 relevant model files.

Based on the above pros and cons, the first option is chosen as it is easier to implement and only requires 1 logic file to be edited.


Aspect: Implementation of purchase order storage
There are various design on how to integrate purchase order in the existing storage system. The pros and cons for each option is shown below.

Alternative 1 (current choice): Stored in the same file as the item but with different xml tag
Pros: Eases the implementation by adding in relevant purchase order detail in the existing storage implementation.
Cons: Disorganizes the storage file as all the different data is clunked together

Alternative 2: Created a whole new standalone storage for purchase order
Pros: Organizes the data separately into it’s own file.
Cons: Requires a lot of work, additional files and test cases.

Based on the above pros and cons, the first option is chosen as it is easier to implement, requires lesser test case and more efficient work load.