Employees must log onto the system. Purchasing must only allow authenicated users within the Director and Office Manager roles to have access to this subsystem. The Employee full name must appear somewhere on the form.
Purchases are to a specific vendor. A vendor may or may not have a purchase order currently active that is not yet placed. A purchase order that is currently active but not yet placed will have a null Order Date and Order Number on the database record. An order may be created over several work sessions until a decision is made to actually place (send the order) to the vendor. A vendor may have only one active purchase order on file at a time. When a vendor is selected, load either the active order (if present) or an empty (new/unsaved) order.
A current active order is an existing order which has not yet been placed. This is an order that contains items that are being considered for purchasing from the vendor. The director may make any alternations to this order by adding more items, adjusting quantity and price for items, and removing items from the order list. A current active order is identified by not having an Order Date and a Purchase Order Number.
Once the director is satisfied with the purchase order, they may “place” the purchase order. When the order is placed, the Order Date is filled with the current date during the transaction process. The Purchase Order Number must be generated at this time using the next available order number. This purchase order is now ready for receiving and can no longer be altered.
Business Rules and Form Processing:
NULL
Note: Quantity values in the
Products
table are as single items - thus, aQuantityOnHand
of 12 for KitKat bars means 12 individually packaged KitKats. For theOrderDetails
table, theQuantity
value is a bulk quantity - thus a quantity of 3 with anOrderUnitSize
of 20 means that we are expecting 60 items to be shipped. See theVendorCatalogs
table for clarifications on order unit types, sizes and costs.
The Purchasing subsystem uses the following tables in the database. Note that references to EmployeeID
should be resolved against the logged-in user. Nullable columns are marked with an O
for “Optional”.