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.
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.
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:
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:
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:
Example:
-
edit-po 1 q/999 d/2018-12-12
Updates the quantity and required date of the 1st purchase order to999
and2018-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:
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.
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.
Storage component
Purchase orders are stored in XmlAdaptedPurchaseOrder
objects, which maintain a class relationship as shown in the diagram below:
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.
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.
Operations performed on purchase orders follow the sequence of operations described in the diagram below.
-
Command input is received by the UI component.
-
The command execution is handled by the Logic component.
-
The changes to data are effected by the Model component.
-
The new Inventory Manager data is saved by the Storage component.
This sequence of events is summarized in the following sequence diagrams:
list-po
command.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.