Chapter VI. How to make a warehouse program with ZZZ server?

Introduction

What can you learn in this section of the documentation?
  1. How to create a software from scratch?

  2. What is the methodology to create MVP (Minimum Viable Product) and how do we apply it in practice when creating a warehouse program?

  3. What is design pattern? By basically applying the template MVC (Model View Controller).

  4. How to make a warehouse program?

  5. How can we use ZZZ server to develop multi-platform software?

At the end of each section there is a link to the archive with the program code described there.

The author of this documentation has been involved in the development of some of the most well-known Bulgarian software products for warehouse management, accounting, Payroll and Personnel, as well as in the development of many other software products.

This document is under construction!

1. Planning

Before we begin developing a software product, we need to think about how to implement it. For this we will use the methodology MVP (Minimum Viable Product).

What is MVP ?

MVP is a user-friendly product and has a minimal set of features.

To determine the minimum set of features of our product we will use the following 5 steps:
  1. Determine the primary purpose of the product.
  2. Determine the main process when using the product.
  3. Making of a list of features for each stage.
  4. Sort functions by list according to their importance.
  5. Determination of MVP.
Let's apply these steps to our warehouse program:
1. The main purpose of our product is to deliver and dispose of goods from stock and retrieve inquiries.

2. Main Process: Allows users to deliver and print goods as well as make inquiries.
delivery
dispatching
reports

3. List of features for each stage (include all features that think of).
delivery
dispatching
reports
delivery of good
dispatching of good
availability checklist
delivery of goods
dispatching of goods
supply report
bill of goods
warehouse receipt
report for dispatching
delivery invoice
outbound invoice
given on consignment
taking consignation
giving consignment
taken on consignment
delivery in batches
pick batch
stock batch availability
delivery by weighted average
pick a weighted average
deliveries by lot
delivery by (FIFO)
pick by (FIFO)
picks in batches
delivery by (LIFO)
pick by (LIFO)
issuing a receipt

weighted average - we mean delivering and picking goods at a weighted average price.
(FIFO) First In First Out - we mean that we first write the goods that were delivered at the earliest.
(LIFO) Last In First Out - we mean that we first write the delivered goods.

4. We rank the functions vertically in importance, with the highest priority functions at the top (in our case there is no need to move).
delivery
dispatching
reports
delivery of good
dispatching of good
availability checklist
delivery of goods
dispatching of goods
supply report
bill of goods
warehouse receipt
report for dispatching
delivery invoice
outbound invoice
given on consignment
taking consignation
giving consignment
taken on consignment
delivery in batches
pick batch
stock batch availability
delivery by weighted average
pick a weighted average
deliveries by lot
delivery by (FIFO)
pick by (FIFO)
picks in batches
delivery by (LIFO)
pick by (LIFO)
issuing a receipt

5. We define MVP.
5.1. Determining the application skeleton (these are the functions without which the product can not achieve its primary purpose) is usually the first row of functions and encloses them with a black broken frame.
5.2. We define the minimum set of functions required to actually use the application by users and surround them with a red broken frame.
The rest of the features can be realized at a later stage of product development.
delivery
dispatching
reports
delivery of good
dispatching of good
availability checklist
delivery of goods
dispatching of goods
supply report
bill of goods
warehouse receipt
report for dispatching
delivery invoice
outbound invoice
given on consignment
taking consignation
giving consignment
taken on consignment
delivery in batches
pick batch
stock batch availability
delivery by weighted average
pick a weighted average
deliveries by lot
delivery by (FIFO)
pick by (FIFO)
picks in batches
delivery by (LIFO)
pick by (LIFO)
issuing a receipt
Excellent, we are now ready to move on to realization and will be implemented through the following stages:
  1. Realize the skeleton of the product;
  2. Implementing MVP;
  3. Stepwise add additional features.

2. Realize the skeleton of the product

To begin product development, we need to have the following minimum of tools:
  1. A computer with 32 or 64-bit operating system Windows, Linux or 64-bit Mac OS X.
  2. ZZZ server + demo package to it.
  3. Text editor capable of processing files with UTF-8 encoding.
I will personally use this documentation when creating this documentation:
  1. Computer with operating system Windows.
  2. ZZZ server + demo package to it.
  3. Text editor - Notepad++, which you can download for free from the Internet.

Before I go on, I'll explain what is design pattern?

Design templates present the best practices used by advanced object-oriented software developers. These are solutions to the major issues developers face. These solutions have come in the way of samples and mistakes from many software developers over a long period of time.

The template MVC
MVC template means Model-View-Controller. This template is used to divide the activities that the application implements.
Model - the model is an object that takes care of the data. It may also have a logic for updating the controller when changing the data.
View - the view displays the data that the model contains.
Controller - the controller interacts with the Model and the View. It controls the data flow in the object describing the model and updates the view when changing the data by dividing the model from the data. Actually, the controller's functions are those through which the model reacts to the world outside of the template.

ModelClass <-- ControllerClass --> ViewClass
			^
			|
		Application

We saw that the skeleton of the product consists of the following features:
  1. Supply of goods.
  2. Output of a good.
  3. Availability report.
Let's start implementing them successively.
1. Supply of goods.
We set the delivery of goods: product name, unit of measure, quantity and delivery price, eventually bar code.

Designing the object model of the application

This will look like the planned object model of the warehouse application:
StockModelClass <-- StockControllerClass --> StockViewClass
				^
				|
StoreModelClass <-- StoreControllerClass --> StoreViewClass
				^
				|
			StoreApplication

Let's plan each class individually:

StockModelClass
  • getName()
  • setName(name)
  • getMeasure()
  • setMeasure(measure)
  • getQuantity()
  • setQuantity(quantity)
  • getDeliveryPrice()
  • setDeliveryPrice(deliveryPrice)
  • getBarcode()
  • setBarcode(barcode)

  • save()
    - records the product information in the database
  • loadByName(name)
    - reads the stock from the database by finding it by name
  • loadByBarcode(barcode)
    - reads the stock from the database by finding it in a barcode

StockViewClass
  • displayStock()

StockControllerClass
  • getStockName()
  • setStockName(name)
  • getStockMeasure()
  • setStockMeasure(measure)
  • getStockQuantity()
  • setStockQuantity(quantity)
  • getStockDeliveryPrice()
  • setStockDeliveryPrice(deliveryPrice)
  • getStockBarcode()
  • setStockBarcode(barcode)

  • saveStock()
    - records the product information in the database
  • loadStockByName(name)
    - reads the commodity from the database by finding it by name
  • loadStockByBarcode(barcode)
    - reads the commodity from the database by finding it in a barcode
  • updateView()
    - depicts the goods

StoreModelClass
  • deliveryStock(name, barode, measure, quantity, deliveryPrice)
  • takeStockByName(name, measure, quantity)
  • takeStockByBarcode(name, measure, quantity)
  • getAvailability()

StoreViewClass
  • displayAvailability()

StoreControllerClass
  • deliveryStockInStore(name, barode, measure, quantity, deliveryPrice)
  • takeStockByNameFromStore(name, measure, quantity)
  • takeStockByBarcodeFromStore(name, measure, quantity)

  • updateAvailabilityView()
    - reports the availability of goods in the warehouse

StoreApplication
  • delivery()
  • take()
  • updateView()

* This part of the documentation is in the process of being developed!

3. Implementing MVP

* This part of the documentation is in the process of being developed!

4. Add additional features

* This part of the documentation is in the process of being developed!