Πώς να δημιουργήσετε μια φοβερή εφαρμογή διαχείρισης αποθέματος σε PHP και MySQL

Δεν χρειάζεστε φουσκωμένο εταιρικό λογισμικό για να παρακολουθείτε αποτελεσματικά το απόθεμά σας. Αυτό το σεμινάριο θα σας βοηθήσει να αναπτύξετε τη δική σας προσαρμοσμένη εφαρμογή παρακολούθησης αποθέματος, ώστε να μπορείτε να λαμβάνετε έξυπνες αποφάσεις αποθέματος βάσει έγκαιρων και ακριβών δεδομένων αποθέματος.

Απαιτήσεις συστήματος

Το σύστημά μας αποθέματος απαιτεί την τυπική εμπορική άδεια phpGrid και phpChart. Χρειάζεται μερικές προηγμένες δυνατότητες και από τα δύο στοιχεία.

  • PHP 5.6+ (Η PHP 7.x συνιστάται πλέον! )
  • MySQL / MariaDB
  • phpGrid Lite (subgrid) -ή- phpGrid Enterprise (Κύρια λεπτομέρεια, ομαδοποίηση)
  • phpChart (για αναφορές)

Τι υπάρχει σε ένα Σύστημα Διαχείρισης Αποθέματος

Ένα σύστημα διαχείρισης αποθέματος έχει πολλά κρίσιμα στοιχεία. Στον πυρήνα του, ο έλεγχος αποθέματος λειτουργεί παρακολουθώντας τις δύο κύριες λειτουργίες μιας αποθήκης: παραλαβή (εισερχόμενη) και αποστολή (εξερχόμενη). Άλλες δραστηριότητες, όπως η μετακίνηση ή η μετεγκατάσταση αποθεμάτων, πραγματοποιούνται επίσης. Οι πρώτες ύλες μειώνονται και τα τελικά προϊόντα αυξάνονται.

  • Εισερχόμενες αποστολές
  • Εξερχόμενες παραγγελίες
  • Καταγραφή εμπορευμάτων
  • Προμηθευτές
  • Σαρωτής γραμμωτού κώδικα (1/2019 Νέο!)

Σχεδιασμός βάσης δεδομένων συστήματος αποθέματος

Συνήθως, ένα σύστημα απογραφής έχει τέσσερα βασικά στοιχεία: προϊόντα, αγορές, παραγγελίες και προμηθευτές. Κάθε στοιχείο πρέπει να παρακολουθείται με βάση την τοποθεσία, το SKU και την ποσότητα του. Το τρέχον απόθεμα, ή τα προϊόντα που διατίθενται, ενημερώνεται παρακολουθώντας εισερχόμενες αποστολές και εξερχόμενες παραγγελίες. Οι ειδοποιήσεις παραγγελιών μπορούν να ρυθμιστούν ώστε να ενεργοποιούνται όταν τα επίπεδα αποθέματος πέφτουν κάτω από τα ειδικά καθορισμένα ελάχιστα επίπεδα.

Ρύθμιση της βάσης δεδομένων διαχείρισης αποθέματος

Πραγματοποιήστε λήψη του InventoryManager.sqlσεναρίου SQL από το repo GitHub αυτού του σεμιναρίου και, στη συνέχεια, εκτελέστε το σενάριο χρησιμοποιώντας ένα εργαλείο MySQL όπως το MySQL Workbench. Αυτό θα δημιουργήσει μια νέα βάση δεδομένων που ονομάζεται InventoryManagerκαθώς και τους πίνακες που απαιτούνται για αυτό το σεμινάριο.

Μια δευτερεύουσα σημείωση στο ZenBase

The Inventory Management System is also one of the many application templates readily available at ZenBase (built on the top of phpGrid) for anyone — with or without coding skills — to use and customize for their own needs.

Ρύθμιση phpGrid

Ας προχωρήσουμε.

Θα χρησιμοποιήσουμε ένα στοιχείο datagrid από το phpGrid για να χειριστούμε όλες τις εσωτερικές λειτουργίες CRUD (Δημιουργία, Κατάργηση, Ενημέρωση και Διαγραφή) .

Βεβαιωθείτε ότι έχετε κατεβάσει ένα αντίγραφο του phpGrid προτού συνεχίσετε.

Για να εγκαταστήσετε το phpGrid, ακολουθήστε τα εξής βήματα:

  1. Αποσυμπιέστε το αρχείο λήψης phpGrid.
  2. Ανεβάστε το phpGridφάκελο στο φάκελο phpGrid.
  3. Ολοκληρώστε την εγκατάσταση ρυθμίζοντας το conf.phpαρχείο.

Πριν ξεκινήσουμε την κωδικοποίηση, πρέπει να συμπεριλάβουμε τις ακόλουθες πληροφορίες στο conf.phpαρχείο διαμόρφωσης phpGrid.

Δημιουργία διεπαφής χρήστη (UI)

Το σύστημα απογραφής μας περιλαμβάνει τέσσερις σελίδες:

  • Τρέχον απόθεμα
  • Εισερχόμενες αγορές
  • Παραγγελίες αποστολής
  • Αναφορές

Μενού

Το αρχείο συμπερίληψης για το μενού αποθηκεύεται σε ένα incφάκελο με το όνομα menu.php. Ο κωδικός για το μενού είναι απλός. Για λόγους εστίασης, δεν θα πάμε σε μεγάλες λεπτομέρειες Μη διστάσετε να δείτε τον κώδικα μέσα στο incφάκελο.

Προσθέσαμε επίσης ένα στοιχείο μενού με το όνομα Reports.

Σελίδες

Θα χρησιμοποιήσουμε το ίδιο πρότυπο σελίδας που χρησιμοποιήσαμε για τα προγράμματα εκμάθησης CRM και Project Management.

Τρέχον απόθεμα

Ας ξεκινήσουμε με τη σελίδα Τρέχον απόθεμα.

Οι εισερχόμενες αγορές αυξάνουν το απόθεμα ενώ οι εξερχόμενες παραγγελίες το μειώνουν. Από την προοπτική της κύριας λεπτομέρειας, το τρέχον απόθεμα δεν έχει ένα, αλλά δύο λεπτομερείς πίνακες δεδομένων - τις αγορές (εισερχόμενες αγορές) και τις παραγγελίες (εξερχόμενες παραγγελίες).

Έτσι, η τρέχουσα σελίδα αποθέματος αποτελείται από ένα κύριο πλέγμα (το τρέχον απόθεμα σε απόθεμα) και δύο πλέγματα λεπτομερειών (Εισερχόμενες αγορές και εξερχόμενες παραγγελίες). Μπορούμε εύκολα να παρουσιάσουμε αυτές τις σχέσεις χρησιμοποιώντας τη λειτουργία phpGrid one master και πολλαπλών λεπτομερειών datagrids.

phpGrid Lite εναντίον Professional και Enterprise

Master detail and Grouping features require phpGrid Professional or Enterprise edition. If you are on the free Lite version, you can still use subgrid in place of Master detail albeit less advanced. Professional or Enterprise versions are highly recommended.

If you have read the last tutorial Building a Donation Manager from Scratch, you will have no problem following the code below.

Note the use of the set_col_format() function used to format the integers.

That’s it for the Current Inventory datagrid. Here’s what it looks like so far:

Now, let’s make a few changes to enhance our Product datagrid.

First of all, we will add some conditional formatting: whenever the InventoryOnHand is set to zero or a negative value, it is displayed using a different background color. We will use the set_conditional_format() function for this purpose.

The above code adds a display condition so that whenever the InventoryOnHand field has a value that is less than (lt) one, the text color changes to red and the background color to dark gray (#DCDCDC).

Secondly, whenever the InventoryOnHand is less than the value shown in MinimumRequired, we would like to alert the user by displaying it in a prominent background color such as gold. To compare values between two fields, we must switch to Javascript because the set_conditional_format() function only works with a single field.

The code below uses a for loop to iterate through each row in the Products datagrid. It compares the inventoryOnHand with theminimumRequired and, when the condition is met, it will use thesetCell function to change the background color.

You can learn more about comparing multiple cell values on the phpGrid support website.

Next, on the same page, we need to see the purchases coming in (Incoming) and orders going out (Outgoing) for a specific product.

Purchases Detail Grid (Incoming)

Orders Detail Grid (Outgoing)

Both detail grids use the same foreign key ProductId to link to the master datagrid (Products).

Finally, our complete code to manage the Current Inventory page is:

Here’s the a snapshot of the inventory page:

Incoming Purchases

The next page is the Incoming Purchase page. It is similar to the Purchase Detail Grid we saw when setting up the Current Inventory page. We group the purchases by ProductId and display the sum inNumberReceived. Any incoming purchases will increase the inventory.

Note: Grouping feature is only available in the phpGrid Professional and Enterprise edition. To filter without the grouping, use the integration search.

The complete code:

Here’s a screenshot of our Incoming Purchases page with grouping enabled:

Outgoing Orders

The next page is the Outgoing Orders page. It is similar to the Orders Detail Grid from the Current Inventory page. Here, we will introduce an advanced function called set_grid_method().

Summary

This tutorial builds a simple and extendable inventory system in less than 50 lines of code. The progressive style of these tutorials also helps the reader to ultimately become more familar and comfortable with phpGrid by introducing a limited number of new phpGrid features in each one.

What’s Coming Up

This marks the end of the code needed to create the datagrids required for this tutorial. However, we are not done yet. There is still one more page we need to create — Reports. We will cover that after the jump.

What’s the use of an inventory system without some of type of report? In this section, you will learn how to use phpChart — which seamlessly integrates with phpGrid — to create visually pleasing and useful reports for your Inventory Manager application.

Here’s what our page will look like when it’s done:

Before we start, we need to install phpChart. It is recommended that you obtain the full version of phpChart since the free version (phpChart Lite) supports only the line chart.

Setup phpChart

It’s important that we keep phpGrid and phpChart in separate folders. Below is the recommended folder hierarchy.

www +-- Donation_Manager | |-- phpGrid | | +-- conf.php | |-- phpChart | | +-- conf.php | +-- ...

Report Design

We will place a pie chart next to an inventory summary grid. The datagrid provides the series data to plot the pie chart.

phpGrid and phpChart Integration

First of all, include calls to both conf.php files at the beginning of the code.

require_once("phpGrid/conf.php"); require_once("phpChart/conf.php");

Pie Chart

Below is the complete code to create our pie chart:

Let’s walk through the code.

The first line is the constructor. We pass array(null) as the series data because we don’t wish to have any data displayed in the pie chart initially. The inventory data used to plot the chart is not yet available when it is first initialized. The data is fed from the datagrid later in JSON.

We also give our chart a unique name, PieChart.

Next, we give it a title. Nothing fancy here.

Once we have the title, we call the series default function to set the renderer to PieRenderer. Unlike a bar chart, a pie chart does not have a Y axis.

We can also set the rendererOptions property. We will not go into each option in detail here, but you can find more information in the online documentation.

We also want to show a legend. The set_legend command below shows the legend to the west (noted byw) or to the left of the pie chart.

We will also remove the border and the background.

Finally, we draw our chart by giving it a height and width in pixels.

However, if you execute the code now, you will not see the chart because the data used to render it isn’t available yet.

Inventory Summary Datagrid

Here, we will use the same the inventory datagrid as we did in the Products page. We just need to add one more thing — an event handler.

In phpGrid, we can add an event handler with the add_event() function. add_event() binds an event handler, which is essentially a JavaScript function, to a specific phpGrid event. A list of possible events can be found here.

Since we must wait for the datagrid to finish loading before it can send the data to plot the chart, we use the event jqGridLoadComplete.

phpGrid 101 — jqGridLoadComplete Event

jqGridLoadComplete is last event that occurs once the whole datagrid body has finished loading. Note that the grid body will be reloaded if the user changes the sort order of a column or sets a filter.

Sending Data with Javascript

The following is the Javascript event handler for jqGridLoadComplete.

The complete code:

Now there you have it. Your just built your very first inventory management system from scratch using PHP and MySQL!

Thank you for reading! If you enjoyed this post, please give me some claps so more people see it.

New to Programming? Fear Not!

If you are new to programming and are not yet comfortable with coding, you may want to check out ZenBase that is built on the top of the phpGrid. The Inventory Management System is but one of the many application templates readily available at ZenBase for anyone — with or without coding skills — to use and customize for their own needs.

Online Demo

  • Current Inventory
  • Incoming Purchases
  • Outgoing orders
  • Reports (with datagrid side-by-side)

Next: Add the barcode scanner

Add the barcode scanner to our inventory management system

Download Source Code on Github

phpcontrols/inventory-manager

Source code of inventory-manager the awesome Inventory Management Application in PHP and MySQL from Start to Finishgithub.com

Common Issue:

Fatal error: Uncaught Error: Class ‘phpGrid\C_DataGrid’ not found

How to fix:

If you are using the free Lite version, you can either comment out the first line

// use phpGrid\C_DataGrid;

— OR —

Add a global namespace symbol — single backslash — BEFORE the constructor

$dg = new \C_DataGrid(“SELECT * FROM orders”, “orderNumber”, “orders”);

You may be also interested in those tutorials:

Build a Project Management Application From Scratch

What is a Project Management Application?Build a Simple CRM from Start to Finish

Customer Relationship Management (CRM) is a system that manages customer interactions and data throughout the customer…Building a Donation Manager from Scratch in PHP

Ευχαριστώ για την ανάγνωση. Αν σας άρεσε αυτό το άρθρο, πατήστε αυτό το χειροκρότημα; για να βοηθήσω άλλους να το βρουν και να με ακολουθήσουν στο Twitter.

Θα θέλατε να δείτε περισσότερα μαθήματα όπως αυτό; Στείλτε ένα αίτημα στο Twitter μου ή αφήστε ένα σχόλιο παρακάτω!