Storage Boxx is an open-source PHP Inventory Management System. It is not a “super professional crazy bloated with features” kind of system. But it covers the basics, has a built-in webcam QR code scanner, built-in NFC scanner, and low stock warning push notifications. This will help small businesses get started with inventory stock keeping.
TABLE OF CONTENTS
DOWNLOAD & INSTALLATION
First, here are the download links and a quick “setup guide” for the impatient folks who don’t have the patience to read through everything.
LICENSE & DOWNLOAD
Storage Boxx is released under the MIT License. You are free to use it for personal and commercial projects, and modify it as you see fit. On the condition that the software is provided “as-is”. There are no warranties provided and “no strings attached”. Code Boxx and the authors are not liable for any claims, damages, or liabilities.
Download Storage Boxx | GitHub | SourceForge
SYSTEM REQUIREMENTS
- LAMP/WAMP/MAMP/XAMPP
- Apache Mod Rewrite
- PHP MYSQL PDO Extension
- At least PHP 8.0
INSTALLATION
Just access http://your-site.com
in your browser and walk through the installer.
EQUIPMENT RECOMMENDATIONS
- A simple USB QR Code scanner only costs like 30~40 bucks these days – Get yourself one if you don’t already have one.
- NFC tags ain’t that bad either – 10 pieces of Ntag213 only cost 2-3 bucks. Buy them in bulk, and one piece will only cost a few cents.
HOW TO USE
So far so good? Let us now go through a quick crash course on how to use Storage Boxx.
Fullscreen Mode – Click Here
STORAGE BOXX FAQ
Storage Boxx is “not working”? Here are a few of the common problems and how to “fix” them.
I DELETED ALL ADMIN ACCOUNTS
require "lib/CORE-Go.php";
$_CORE->load("Users");
$_CORE->Users->save("NAME", "EMAIL", "PASSWORD");
Just create an “account recovery” script to create a new account. Run and delete this afterward.
CHANGED DOMAIN OR PATH
- Update
HOST_BASE
inlib/CORE-Config.php
. Make sure to include the path (with a trailing slash) if not deployed at the base URL. E.G.http://site.com/storageboxx/
- Delete the existing
.htaccess
file. - Create
init.php
.require "lib/CORE-Go.php";
$_CORE->Route->init();
- Access
http://site.com/init.php
, this will automatically regenerate the.htaccess
file. - Delete
init.php
. - Clear the service worker and browser cache if you want to be “totally safe”.
PAGES ARE NOT RESOLVING OR SHOWING PROPERLY
- Make sure that
MOD_REWRITE
is enabled in Apache. - Make sure that
AllowOverride
is set properly in Apache. - If using
https://
, make sure that your SSL cert and virtual host are properly set. - In Mac/Linux, make sure that Apache/PHP has permission to read the files and folders.
Here is a quick “working example” of a test site on my WAMP server:
<VirtualHost site.com:443>
DocumentRoot "D:\http"
ServerName site.com:443
SSLEngine On
SSLCertificateFile "C:/xampp/apache/conf/ssl.crt/server.crt"
SSLCertificateKeyFile "C:/xampp/apache/conf/ssl.key/server.key"
<Directory "D:\http">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
MANUAL INSTALLATION
- Create a database and import all
lib/SQL-*.sql
in ascending order. - Open
lib/CORE-Config.php
, update the settings to your own.- The host settings.
- Database settings.
- If you want to develop mobile apps, consider enabling CORS.
- Set your own JWT secret key, and the issuer to your domain or company name.
- Run
$_CORE->Route->init()
to create.htaccess
. - Create your own admin user. See “deleted all admin accounts” above.
- Update
index.php
.require __DIR__ . DIRECTORY_SEPARATOR . "lib" . DIRECTORY_SEPARATOR . "CORE-Go.php";
$_CORE->load("Route");
$_CORE->Route->run();
I WANT TO CHANGE THE DATE FORMAT
Login > under system settings section > there are 4 “MYSQL date/time format” settings, change them accordingly. These are simply formats for the MYSQL DATE_FORMAT()
function.
NOT WORKING. DON’T KNOW WHY.
Open the developer’s console, reload the page and see the error message.
NFC FEATURES ARE “NOT WORKING”!
At the time of writing, Web NFC only works on Android Chrome and Baidu Browser – CanIUse
QUICK REFERENCE
This section is for the developers, a quick walkthrough of the general system structures.
FOLDER STRUCTURE
assets/
Public images, Javascript, CSS, etc…lib/
Core engine and library files.API-AAA.php
The API endpoints. Will be deployed athttp://site.com/api/AAA/
.CORE-CCC.php
Core engine files. Try not to mess with these.LIB-LLL.php
Library files.SQL-SSS.php
SQL database files. Can actually delete these after installation.
pages/
HTML pages and template.PAGE-PPP.php
“Normal” pages. Will be deployed athttp://site.com/PPP/
.REPORT-Loader.php
A “special page” to generate reports.TEMPLATE-TTT.php
HTML page template.MAIL-MMM.php
Email templates.
THE FRAMEWORKS
Storage Boxx is built with:
- Bootstrap and Google Material Icons.
- HTML5 QR Code Scanner
- QR Code Generator
- PHP Web Push
- PHP JSON Web Token
- Core Boxx modular PHP framework.
DATABASE TABLES
USERS
Field | Description |
user_id |
The user ID, primary key. |
user_name |
The user name. |
user_email |
The user’s email address. |
user_password |
The password. Encrypted. |
user_token |
NFC login token. |
Field | Description |
user_id |
User ID, primary and foreign key. |
reset_hash |
Password reset security hash. |
reset_time |
Timestamp when the reset request is made. Spam prevention. |
SYSTEM
Field | Description |
setting_name |
Primary key. |
setting_description |
Description of the setting. |
setting_value |
The value of the setting. |
setting_group |
Setting group.
|
Field | Description |
endpoint |
Primary key, web push endpoint. |
data |
JSON-encoded subscription object. |
ITEMS
Field | Description |
stock_sku |
The SKU of the item, primary key. |
stock_name |
Name of the item. |
stock_desc |
Description of the item. |
stock_unit |
Unit of measurement. |
stock_low |
For low stock monitoring. Set to 0 for “no monitoring”. |
stock_qty |
Current quantity in stock. |
Field | Description |
stock_sku |
The SKU of the item. Primary key. |
mvt_date |
Date of movement entry. Primary key. |
mvt_direction |
The direction of the movement.
|
user_id |
The user who made this movement entry. |
mvt_qty |
Quantity moved. |
mvt_notes |
Notes, if any. |
DEVELOPING STORAGE BOXX
As simple as it may be, going through the entire system is still going to take some time. So instead of “explaining line-by-line”, here is a condensed version of “how to quickly customize and upgrade”.
CORE BOXX LIBRARY REFERENCE
For most of the core modules, you can refer to the Core Boxx reference library.
STEP 1) CREATE/MODIFY DATABASE TABLES
Add your new tables or views, modify the existing ones.
STEP 2) ADD/UPDATE SYSTEM MODULES
class Report extends Core {
function getMoveByUser ($id) {
return $this->DB->fetchAll(
"SELECT * FROM `stock_mvt` WHERE `user_id`=? ORDER BY `mvt_date` DESC", [$id]
);
}
}
To add a new module:
- Create
lib/LIB-Module.php
. - Define
class Module extends Core
. - Add functions inside.
In this example, we add a new report module – lib/LIB-Report.php
and class Report extends Core
. That’s all. This new module can now be loaded via $_CORE->load("Report")
and the function can be accessed via $_CORE->Report->getMoveByUser()
.
STEP 3) ADD/UPDATE API ENDPOINT (OPTIONAL)
// (A) REGISTERED USERS ONLY
if (!isset($_SESS["user"])) {
$_CORE->respond(0, "Please sign in first", null, null, 403);
}
switch ($_REQ) {
// (B) INVALID REQUEST
default:
$_CORE->respond(0, "Invalid request", null, null, 400);
break;
// (C) MOVE BY USER REPORT
case "getMoveByUser":
$_CORE->autoGETAPI("Report", "getMoveByUser");
break;
}
To add an API endpoint:
- Core Boxx has an API structure of
http://site.com/api/MODULE/REQUEST
. lib/API-report.php
will create an API endpoint athttp://site.com/api/report
.$_REQ
is the requested serviceREQUEST
segment of the URL.
So for this example, we can send $_POST["id"] = 123
to http://site.com/report/getMoveByUser/
to get the movement report. The API will reply with a JSON encoded string.
STEP 4) ADD/UPDATE HTML CSS JAVASCRIPT
- Add your new pages in
pages/
.- For example,
pages/PAGE-report.php
can be accessed fromhttp://site.com/report
. - Take note –
PAGE-report.php
can only be accessed by users who are signed in.
- For example,
That’s about it. Just reverse engineer and copy from the existing libraries, API, and pages… You will see the development pattern here.
Hi, It’s working fine but i’m facing a little problem while tracking the inventory. Whenever i update the current stock it shows Date and time. The problem I’m facing is that , I’m living in India and the tracking time doesn’t match with IST [ Indian Standard Time] ie.. GMT +5:30 hours. Is their any way of getting it correct, yes then it would be really helpful for me.
Thanks.
https://www.php.net/manual/en/function.date-default-timezone-set.php
https://phoenixnap.com/kb/change-mysql-time-zone
Hi, thanks for the reply, it worked, but i also found 1 more problem is that when we log out it shows – ” AJAX ERROR Failed to parse JSON data.” on first time and it will logged out on second time.
Thanks for reporting! But “AJAX error” is too generic – Open the developer’s console and see what the server is complaining about. Good luck.
I’m a small printshop owner from Rotterdam, the Netherlands
and I would like to keep track of my paper and office supplies.
Recently I discovered Storage Boxx and it really looks simple to use,
and efficient for working with by scanning QR-codes.
Is it possible to add extra fields for Items, like ‘price’ or ‘product-image’.
I also tried making by own stock management system in PHP,
but it’s not efficient to work with.
Of course. See “Developing Storage Boxx” above.
Hi there,
I have checked and debugged as best i can but i am not seeing what the problem is.
I have also made sure that PHP 7.4 is installed. I am getting the following error when installing:
Fatal error: Uncaught Error: Call to undefined function apache_get_version() in /home/ccmuhahx/public_html/ua/lib/CORE-install.php:72 Stack trace: #0 /home/ccmuhahx/public_html/ua/index.php(2): require() #1 {main} thrown in /home/ccmuhahx/public_html/ua/lib/CORE-install.php on line 72
any assistance would be greatly appreciated
Garth
undefined function apache_get_version() > PHP is not installed as a module of Apache
Installer updated. Nothing is wrong if you are running Apache. It’s just running in another manner. Follow up with an “apache cgi vs module” search on the Internet if you wish to learn more.
Thank you, however the new installer is throwing the following error:
Fatal error: Uncaught Error: Call to undefined function str_contains() in E:\Software\wamp\www\php\Storage-Boxx-2022-05-05-a\lib\CORE-install.php on line 72
Error: Call to undefined function str_contains() in E:\Software\wamp\www\php\Storage-Boxx-2022-05-05-a\lib\CORE-install.php on line 72
Regards
Garth
Of course.
str_contains()
only exists in PHP 8+.1) Updated installer to use
strpos
instead.2) Required PHP version has been updated to 8.0. Reason – PHP 7.4 will come to its end of life in Nov 2022. A gentle reminder to update your server soon. https://www.php.net/supported-versions.php
3) If you still want to continue with 7.4, edit lib/CORE-install.php C1 – change I_MIN_PHP back to 7.4.0
Hi there, works perfectly. Only problem is, it does not scan any barcode or QR code.
Error always says: Invalid SKU
Any ideas?
Thanks
Garth
Please do your own basic troubleshooting first (has SKU been registered, open developer’s console), and provide more details.
https://code-boxx.com/faq/#help “Unclear question and request”
https://code-boxx.com/faq/#notwork
Hi W.S. TOH,
I succeeded.
Thank you for your patience and please allow me to continue learning with your help.
projects seem to me the best way to really learn!
all good,
Hi W.S.TOH,
I almost managed, that is, after “installation”, at the primary login with user: “admin@sb.com” and the password “123456”, click on “Sign in” and the “AJAX ERROR” window appears.
“AJAX call error!”
What should I investigate?
Probably API path issues, re-download the latest version. Just import the SQL, and access your site – This thing now has a simple installer… and a webcam QR code scanner.
ok, i tried and got stuck in the “installer” where I got the “Fetch error – See console” error, but I noticed two things:
1. This error occurs regardless of what user and password you entered to access the database
2. The file “lib / storage-boxx.sql” is empty, ie it has only a command line “ctrl – C – exit!” and nothing about the tables on which the database is built
…help me please !
1) Exactly. What is the error message? Just open the developer’s console.
https://code-boxx.com/how-to-debug-javascript/
2) The SQL file reads 1.25KB. No idea what you are talking about – https://github.com/code-boxx/Storage-Boxx/blob/main/lib/storage-boxx.sql
3) Delete your current Storage Boxx database and folder – Redownload an entirely fresh copy. The installer is now fully automated, don’t even need to manually import the database.
‘Failed to create .htaccess’ – followed installation; thoughts?
PHP does not have permission to create or write files on your server.
BINGO; thought had worked that out; thank you!!
Appreciate your responsiveness and this app!!
Helpful for others:
https://stackoverflow.com/a/49566838/3882558
Thank you so much for creating this!
Is there anyway to make this responsive for mobile devices?
Already is.
Hi, I installed in base path and can’t get past login screen. It seems to be dropping me at “(B4) USERS NOT LOGGED IN + INVALID PATH”
What do you think is the problem?
You have already guessed it. Probably invalid path. Just do some simple troubleshooting? See what the server is complaining.
public/common.js section C3
https://code-boxx.com/simple-javascript-debugging-troubleshooting/
how to change (section D2) to my own .htaccess .
thank you
No changes are required if you are deploying in the base path. If not, see “requirements & installation” above (did a small update).