Ako vytvoriť úžasnú aplikáciu na správu zásob v PHP a MySQL

Blog

Ako vytvoriť úžasnú aplikáciu na správu zásob v PHP a MySQL

Na efektívne sledovanie vášho inventára nepotrebujete nadupaný podnikový softvér. Tento tutoriál vám pomôže vyvinúť vlastnú aplikáciu na sledovanie zásob, aby ste sa mohli inteligentne rozhodovať o zásobách na základe včasných a presných údajov o zásobách.

Požiadavky na systém

Náš systém zásob vyžaduje štandardnú komerčnú licenciu phpGrid a phpChart. Z oboch komponentov potrebuje niekoľko pokročilých funkcií.

  • PHP 5.3+ (teraz sa odporúča PHP 7.x!)
  • MySQL / MariaDB
  • phpGrid
  • phpChart (pre správy)

Čo je súčasťou systému riadenia zásob

Systém riadenia zásob má niekoľko kritických komponentov. Vo svojej podstate kontrola zásob funguje tak, že sleduje dve hlavné funkcie skladu: príjem (prichádzajúci) a odosielanie (odchádzajúci). Vykonávajú sa aj ďalšie činnosti, ako napríklad pohyb alebo premiestňovanie zásob. Suroviny sa znižujú a hotové výrobky sa zvyšujú.

  • PHP 5.3+ (teraz sa odporúča PHP 7.x!)
  • MySQL / MariaDB
  • phpGrid
  • phpChart (pre správy)

Návrh databázy inventárneho systému

Systém zásob má spravidla štyri základné prvky: výrobky, nákupy, objednávky a dodávateľov. Každý prvok je potrebné sledovať na základe jeho polohy, SKU a množstva. Aktuálny inventár alebo dostupné produkty sa aktualizujú sledovaním prichádzajúcich zásielok a odchádzajúcich objednávok. Upozornenia na objednávky je možné nastaviť tak, aby sa spustili, keď úrovne zásob klesnú pod vlastné definované minimálne úrovne.

Nastavenie databázy manažéra zásob

Stiahnite si súbor InventoryManager.sql Skript SQL z tohto tutoriálu Repo GitHub , a potom spustite skript pomocou nástroja MySQL, ako napríklad MySQL Workbench . Tým sa vytvorí nová databáza s názvom InventoryManager ako aj tabuľky potrebné pre tento návod.

Bočná poznámka k 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.

Nastavte phpGrid

Poďme ďalej

Použijeme komponent datagrid od phpGrid zvládnuť všetky interné databázy CRUD (vytvoriť, odstrániť, aktualizovať a odstrániť) operácie.

Určite áno stiahnuť kópiu phpGrid než budete pokračovať.

Ak chcete nainštalovať phpGrid, postupujte takto:

  1. Rozbaľte stiahnutý súbor phpGrid.
  2. Nahrajte súbor phpGrid priečinok do priečinka phpGrid.
  3. Dokončite inštaláciu konfiguráciou conf.php súbor.

Predtým, ako začneme s kódovaním, musíme do neho zahrnúť nasledujúce informácie conf.php , konfiguračný súbor phpGrid.

define('PHPGRID_DB_HOSTNAME', 'localhost'); // host name define('PHPGRID_DB_USERNAME', 'root'); // database user name define('PHPGRID_DB_PASSWORD', ''); // database password define('PHPGRID_DB_NAME', 'InventoryManager'); // our donation manager database name define('PHPGRID_DB_TYPE', 'mysql'); // database type define('PHPGRID_DB_CHARSET','utf8'); // always 'utf8' in MySQL

Vytvorenie používateľského rozhrania (UI)

Náš inventárny systém pozostáva zo štyroch stránok:

  • PHP 5.3+ (teraz sa odporúča PHP 7.x!)
  • MySQL / MariaDB
  • phpGrid
  • phpChart (pre správy)

Menu

Súbor zahrnutia ponuky je uložený v súbore vr priečinok s názvom menu.php . Kód ponuky je jednoduchý. Kvôli zaostreniu nebudeme zachádzať do veľkých podrobností. Neváhajte sa pozrieť na kód vo vnútri súboru vr priečinok.

Pridali sme aj položku ponuky s názvom Prehľady.

Stránky

Použijeme rovnakú šablónu stránky, akú sme použili pre CRM a Projektový manažment návody.

Aktuálna inventúra

Začnime stránkou Aktuálny inventár.

Prichádzajúce nákupy zvyšujú zásoby, zatiaľ čo odchádzajúce objednávky ich znižujú. Z pohľadu hlavných podrobností súčasný inventár nemá jednu, ale dve podrobné dátové mriežky- Nákupy (prichádzajúce nákupy) a Objednávky (odchádzajúce objednávky).

Stránka Aktuálny inventár sa teda skladá z jednej hlavnej mriežky (aktuálny inventár na sklade) a dvoch podrobných mriežok (prichádzajúce nákupy a odchádzajúce objednávky). Tieto vzťahy môžeme ľahko predstaviť pomocou funkcie phpGrid one master a viacerých podrobných údajových mriežok.

Ak ste si prečítali posledný návod Vybudovanie manažéra darovania od začiatku , nebudete mať žiadny problém podľa nižšie uvedeného kódu.

Všimnite si použitia nastaviť s formát () funkcia používaná na formátovanie celých čísel.

$dgProd = new C_DataGrid('SELECT * FROM products', 'id', 'products'); $dgProd->set_col_hidden('id', false); $dgProd->enable_autowidth(true)->set_dimension('auto', '200px')->set_pagesize(100); $dgProd->set_col_title('ProductName', 'Name'); $dgProd->set_col_title('PartNumber', 'Part Number'); $dgProd->set_col_title('ProductLabel', 'Label'); $dgProd->set_col_title('StartingInventory', 'Starting Inventory'); $dgProd->set_col_title('InventoryReceived', 'Inventory Received'); $dgProd->set_col_title('InventoryShipped', 'Inventory Shipped'); $dgProd->set_col_title('InventoryOnHand', 'Inventory On Hand'); $dgProd->set_col_title('MinimumRequired', 'Minimum Required'); $dgProd->set_col_format('StartingInventory', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->set_col_format('InventoryReceived', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->set_col_format('InventoryShipped', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->set_col_format('InventoryOnHand', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->set_col_format('MinimumRequired', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->enable_edit('FORM');

To je pre datagrid aktuálneho inventára všetko. Ako to zatiaľ vyzerá:

valueerror nastavenie prvku poľa so sekvenciou

Teraz urobme niekoľko zmien, ktoré vylepšia naše Výrobok datagrid.

kde kúpiť cindikátor

Najprv pridáme nejaké podmienené formátovanie: kedykoľvek InventoryOnHand je nastavená na nulu alebo na zápornú hodnotu, zobrazí sa pomocou inej farby pozadia. Budeme používať nastaviť podmienené formát () funkciu na tento účel.

$dgProd->set_conditional_format( 'InventoryOnHand', 'CELL', array('condition'=>'lt', 'value'=>'1', 'css'=> array('color'=>'red','background-color'=>'#DCDCDC')));

Vyššie uvedený kód pridáva podmienku zobrazenia, takže vždy, keď má pole InventoryOnHand hodnotu, ktorá je menšia ako (lt) jedna, farba textu sa zmení na červenú a farba pozadia na tmavošedú (#DCDCDC).

Za druhé, vždy, keď je hodnota InventoryOnHand nižšia ako hodnota uvedená v položke MinimumRequired, chceli by sme upozorniť používateľa jeho zobrazením na výraznej farbe pozadia, ako je napríklad zlatá. Na porovnanie hodnôt medzi dvoma poľami musíme prepnúť na Javascript, pretože set_conditional_format () funkcia funguje iba s jedným poľom.

Nasledujúci kód používa slučku for na iteráciu každým riadkom v súbore Produkty datagrid. Porovnáva inventárOnHand s minimálnymvyžadovaným a keď je podmienka splnená, použije na zmenu farby pozadia funkciu thesetCell.

$onGridLoadComplete = <<

Môžete sa o tom dozvedieť viac porovnanie viacerých hodnôt buniek na webovej stránke podpory phpGrid.

Ďalej na tej istej stránke musíme vidieť prichádzajúce nákupy ( Prichádzajúci ) a objednávky, ktoré odchádzajú ( Vychádzajúce ) pre konkrétny výrobok.

Mriežka podrobností o nákupoch (prichádzajúce)

// Purchases detail grid $dgPur = new C_DataGrid('SELECT id, PurchaseDate, ProductId, NumberReceived, SupplierId FROM purchases', 'id', 'purchases'); $dgPur->set_col_hidden('id', false)->set_caption('Incoming Purchases'); $dgPur->set_col_edittype('ProductId', 'select', 'select id, ProductLabel from products'); $dgPur->set_col_edittype('SupplierId', 'select', 'select id, supplier from suppliers'); $dgPur->set_dimension('800px');

Mriežka podrobností o objednávkach (odchádzajúce)

// Orders detail grid $dgOrd = new C_DataGrid('SELECT id, OrderDate, ProductId, NumberShipped, First, Last FROM orders', 'id', 'orders'); $dgOrd->set_sortname('OrderDate', 'DESC')->set_caption('Outgoing Orders'); $dgOrd->set_col_hidden('id', false); $dgOrd->set_col_edittype('ProductId', 'select', 'select id, ProductLabel from products'); $dgOrd->set_dimension('800px');

Obe mriežky podrobností používajú na prepojenie s hlavným údajovým mriežkou rovnaký identifikátor ProductId cudzieho kľúča ( Produkty ).

$dgProd->set_masterdetail($dgPur, 'ProductId', 'id'); $dgProd->set_masterdetail($dgOrd, 'ProductId', 'id');

Nakoniec náš kompletný kód na správu súboru Aktuálna inventúra stránka je:

$dgProd = new C_DataGrid('SELECT * FROM products', 'id', 'products'); $dgProd->set_col_hidden('id', false); $dgProd->enable_autowidth(true)->set_dimension('auto', '200px')->set_pagesize(100); $dgProd->set_col_title('ProductName', 'Name'); $dgProd->set_col_title('PartNumber', 'Part Number'); $dgProd->set_col_title('ProductLabel', 'Label'); $dgProd->set_col_title('StartingInventory', 'Starting Inventory'); $dgProd->set_col_title('InventoryReceived', 'Inventory Received'); $dgProd->set_col_title('InventoryShipped', 'Inventory Shipped'); $dgProd->set_col_title('InventoryOnHand', 'Inventory On Hand'); $dgProd->set_col_title('MinimumRequired', 'Minimum Required'); $dgProd->set_col_format('StartingInventory', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->set_col_format('InventoryReceived', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->set_col_format('InventoryShipped', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->set_col_format('InventoryOnHand', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->set_col_format('MinimumRequired', 'integer', array('thousandsSeparator'=>',', 'defaultValue'=>'0')); $dgProd->set_conditional_format('InventoryOnHand', 'CELL', array('condition'=>'lt', 'value'=>'1', 'css'=> array('color'=>'red','background-color'=>'#DCDCDC'))); $onGridLoadComplete = <<enable_edit('FORM'); // Purchases detail grid $dgPur = new C_DataGrid('SELECT id, PurchaseDate, ProductId, NumberReceived, SupplierId FROM purchases', 'id', 'purchases'); $dgPur->set_col_hidden('id', false)->set_caption('Incoming Purchases'); $dgPur->set_col_edittype('ProductId', 'select', 'select id, ProductLabel from products'); $dgPur->set_col_edittype('SupplierId', 'select', 'select id, supplier from suppliers'); $dgPur->set_dimension('800px'); // Orders detail grid $dgOrd = new C_DataGrid('SELECT id, OrderDate, ProductId, NumberShipped, First, Last FROM orders', 'id', 'orders'); $dgOrd->set_sortname('OrderDate', 'DESC')->set_caption('Outgoing Orders'); $dgOrd->set_col_hidden('id', false); $dgOrd->set_col_edittype('ProductId', 'select', 'select id, ProductLabel from products'); $dgOrd->set_dimension('800px'); $dgProd->set_masterdetail($dgPur, 'ProductId', 'id'); $dgProd->set_masterdetail($dgOrd, 'ProductId', 'id'); $dgProd->display();

Tu je prehľad stránky inventára:

Prichádzajúce nákupy

Nasledujúca stránka je Prichádzajúci nákup stránku. Je to podobné ako Podrobná mriežka nákupu sme videli pri nastavovaní Aktuálna inventúra stránku. Nákupy zoskupíme podľa ProductId a zobrazíme sumu v čísle Prijaté. Akékoľvek prichádzajúce nákupy zvýšia zásoby.

$dgPur -> set_group_properties('ProductId', false, true, true, false); $dgPur -> set_group_summary('NumberReceived','sum');

Kompletný kód:

$dgPur = new C_DataGrid('SELECT id, PurchaseDate, ProductId, NumberReceived, SupplierId FROM purchases', 'id', 'purchases'); $dgPur->set_col_hidden('id', false); $dgPur->set_col_title('PurchaseDate', 'Date of Purchase'); $dgPur->set_col_title('ProductId', 'Product'); $dgPur->set_col_title('NumberReceived', 'Number Received'); $dgPur->set_col_title('SupplierId', 'Supplier'); $dgPur->set_col_edittype('ProductId', 'select', 'select id, ProductLabel from products'); $dgPur->set_col_edittype('SupplierId', 'select', 'select id, supplier from suppliers'); // $dgPur->enable_edit('FORM'); $dgPur->set_pagesize(100); $dgPur->set_col_width('PurchaseDate', '50px'); $dgPur->set_col_width('NumberReceived', '35px'); $dgPur -> set_group_properties('ProductId', false, true, true, false); $dgPur -> set_group_summary('NumberReceived','sum'); $dgPur->enable_autowidth(true); $dgPur->display();

Tu je naša snímka obrazovky Prichádzajúce nákupy stránka so zapnutým zoskupovaním:

Odchádzajúce objednávky

Nasledujúca stránka je Odchádzajúce objednávky stránku. Je to podobné ako Podrobná mriežka objednávok z Aktuálna inventúra stránku. Tu si predstavíme pokročilú funkciu tzv nastaviť mriežka metóda () .

$dgOrd = new C_DataGrid('SELECT id, OrderDate, ProductId, NumberShipped, First, Last FROM orders', 'id', 'orders'); $dgOrd->set_sortname('OrderDate', 'DESC'); $dgOrd->set_col_hidden('id', false); $dgOrd->set_col_title('OrderDate', 'Order Date'); $dgOrd->set_col_title('ProductId', 'Product'); $dgOrd->set_col_title('NumberShipped', 'Number Shipped'); $dgOrd->set_col_edittype('ProductId', 'select', 'select id, ProductLabel from products'); // $dgOrd->enable_edit('FORM'); $dgOrd->set_pagesize(100); $dgOrd->set_col_width('OrderDate', '30px'); $dgOrd->set_col_width('NumberShipped', '35px'); $dgOrd->set_col_width('First', '20px'); $dgOrd->set_col_width('Last', '20px'); $dgOrd->set_grid_method('setGroupHeaders', array( array('useColSpanStyle'=>true), 'groupHeaders'=>array( array('startColumnName'=>'First', 'numberOfColumns'=>2, 'titleText'=>'Customer Name') ))); $dgOrd->enable_autowidth(true); $dgOrd->display();

Zhrnutie

Tento tutoriál vytvára jednoduchý a rozšíriteľný systém zásob v menej ako 50 riadkoch kódu. Progresívny štýl týchto návodov tiež pomáha čitateľovi stať sa v konečnom dôsledku známejším a pohodlnejším s phpGrid zavedením obmedzeného počtu nových funkcií phpGrid v každom z nich.

Čo sa chystá

To znamená koniec kódu potrebného na vytvorenie dátových mriežok požadovaných pre tento tutoriál. Ešte sme však neskončili. Ešte musíme vytvoriť jednu stránku - Správy. Po skoku to pokryjeme.

Aké je použitie systému zásob bez určitého typu správ? V tejto časti sa naučíte, ako používať phpChart - ktorý sa bezproblémovo integruje s phpGrid - na vytváranie vizuálne príjemných a užitočných správ pre vašu aplikáciu Inventory Manager.

Takto bude naša stránka vyzerať, keď bude hotová:

Predtým, ako začneme, musíme nainštalovať phpChart. Odporúčame vám získať plná verzia phpChart pretože bezplatná verzia (phpChart Lite) podporuje iba čiarový graf.

Nastavte phpChart

Je dôležité, aby sme phpGrid a phpChart uchovávali v oddelených priečinkoch. Nižšie je odporúčané hierarchia priečinkov.

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

Návrh správy

Koláčový graf umiestnime vedľa mriežky súhrnu zásob. Datagrid poskytuje údaje série na vykreslenie koláčového grafu.

Integrácia phpGrid a phpChart

V prvom rade zahrňte hovory na oboch conf.php súbory na začiatku kódu.

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

Koláčový graf

Nasleduje kompletný kód na vytvorenie nášho koláčového grafu:

$pc = new C_PhpChartX(array(array(null)), 'PieChart'); $pc->set_title(array('text'=>'Current Inventory Summary')); $pc->set_series_default(array( 'shadow'=> false, 'renderer'=> 'plugin::PieRenderer', 'rendererOptions'=> array( 'showDataLabels' => true, 'highlightMouseOver' => true, 'startAngle'=> 180, 'sliceMargin'=> 4, 'showDataLabels'=> true ) )); $pc->set_legend(array('show'=>true,'location'=> 'w')); // remove background $pc->set_grid(array( 'background'=>'white', 'borderWidth'=>0, 'borderColor'=>'#000000', 'shadow'=>false)); $pc->add_custom_js(' $('#PieChart').bind('jqplotDataHighlight', function (ev, seriesIndex, pointIndex, data) { $('#label_info').text(data); } ); '); $pc->draw(660,400);

Prejdeme si kód.

Prvý riadok je konštruktor. Pole (null) považujeme za sériové údaje, pretože nechceme, aby boli v koláčovom grafe na začiatku zobrazené údaje. Údaje o inventári použité na vykreslenie grafu ešte nie sú k dispozícii pri jeho prvej inicializácii. Dáta sú dodávané z datagridu neskôr v JSON.

Nášmu grafu tiež dávame jedinečný názov PieChart.

$pc = new C_PhpChartX(array(array(null)), 'PieChart');

Ďalej tomu dáme názov. Nič fantastické tu.

$pc->set_title(array('text'=>'Current Inventory Summary'));

Hneď ako získame názov, zavoláme predvolená séria funkciu na nastavenie vykresľovača na PieRenderer. Na rozdiel od stĺpcového grafu nemá koláčový graf os Y.

Môžeme tiež nastaviť vlastnosť rendererOptions. Nebudeme sa tu podrobne zaoberať každou možnosťou, ale ďalšie informácie nájdete v online dokumentácia .

$pc->set_series_default(array( 'shadow'=> false, 'renderer'=> 'plugin::PieRenderer', 'rendererOptions'=> array( 'highlightMouseOver' => true, 'startAngle'=> 180, 'sliceMargin'=> 4, 'showDataLabels'=> true ) ));

Chceme ukázať aj legendu. Nasledujúci príkaz set_legend zobrazuje legendu na západe (poznamenané byw) alebo naľavo od koláčového grafu.

$pc->set_legend(array('show'=>true,'location'=> 'w'));

Odstránime tiež orámovanie a pozadie.

$pc->set_grid(array( 'background'=>'white', 'borderWidth'=>0, 'borderColor'=>'#000000', 'shadow'=>false));

Nakoniec nakreslíme náš graf tak, že mu dáme výšku a šírku v pixeloch.

$pc->draw(660,400);

Ak však kód spustíte teraz, graf sa vám nezobrazí, pretože údaje použité na jeho vykreslenie ešte nie sú k dispozícii.

Súhrn inventára Datagrid

V phpGrid môžeme pridať obslužný program udalostí s príponou add_event () funkciu. add_event () viaže obslužnú rutinu udalosti, ktorá je v podstate funkciou JavaScript, na konkrétnu udalosť phpGrid. Zoznam možných udalostí nájdete tu .

Pretože musíme počkať, kým sa datagrid dokončí načítanie predtým môže odoslať údaje na vykreslenie grafu, používame udalosť jqGridLoadComplete.

phpGrid 101 - udalosť jqGridLoadComplete

jqGridLoadComplete je posledná udalosť, ktorá nastane, keď sa celé telo datagridu dokončí načítanie. Telo mriežky sa znova načíta, ak používateľ zmení poradie zoradenia stĺpcov alebo nastaví filter.

Odosielanie údajov pomocou JavaScriptu

Nasleduje obslužný program udalostí Javascript pre jqGridLoadComplete.

function(status, rowid) { var dataX = []; var dataY = []; d1 = $('#products').jqGrid('getCol', 'ProductLabel', false); d2 = $('#products').jqGrid('getCol', 'InventoryReceived', false); npoints = d1.length; for(var i=0; i

Kompletný kód:

$dgProd = new C_DataGrid('SELECT id, ProductLabel, InventoryReceived FROM products', 'id', 'products'); $dgProd->set_col_hidden('id', false); $dgProd->set_dimension('auto', 'auto')->set_pagesize(100); $onGridLoadComplete = <<display();

Teraz to máte. Práve ste vybudovali svoj úplne prvý systém správy zásob od začiatku pomocou PHP a MySQL!

premenné prostredia docker exec

Ďakujem za čítanie! Ak sa vám tento príspevok páčil, dajte mi prosím potlesk, aby ho videlo viac ľudí.

Začínate s programovaním? Neboj sa!

Ak ste novým programátorom a kódovanie vám ešte nie je príjemné, môžete sa pozrieť ZenBase ktorý je postavený na vrchu phpGrid. Systém správy zásob je len jedným z veľa šablón aplikácií ľahko dostupné v ZenBase pre kohokoľvek - s alebo bez kódovacie schopnosti - používať a upravovať podľa vlastných potrieb.

#php #mysql

medium.freecodecamp.org

Ako vytvoriť úžasnú aplikáciu na správu zásob v PHP a MySQL

Na efektívne sledovanie vášho inventára nepotrebujete nadupaný podnikový softvér. Tento tutoriál vám pomôže vyvinúť vlastnú aplikáciu na sledovanie zásob, aby ste sa mohli inteligentne rozhodovať o zásobách na základe včasných a presných údajov o zásobách.