Sklad v eshopu
od
(March 8, 2010 8:20:09 PM)
Dobrý den,
pro tyto účely stačí přidat do tabulky m_shop_catalogue 2 nová pole - např.
stock a
minStock, která budou obsahovat aktuální stav skladu a minimální množství. Obě pole vytvořte s SQL typem INT a komponentou TEXT.
Aby nedocházelo k tomu, že při každém vložení do košíku dojde k vyskladnění, je potřeba aplikovat odečítání počtu kusů na skladě až v momentě, kdy je objednávka schválena administrátorem. Každá objednávka může mít více stavů. Tyto stavy jsou definované v poli
orderState tabulky
m_shop_orders. Každá nová objednávka má status=osNew a jednou z možností dalšího stavu je
osSent (posláno). Pro vyskladnění bude tedy potřeba
přepnout objednávku do stavu posláno.
Samotné přepnutí nám logicky samo o sobě žádnou funkčnost nepřinese. Je potřeba ji naprogramovat. Můžeme využít události onChange tabulky m_shop_orders. Tato událost se volá při jakékoli změně libovolného záznamu této tabulky. Vložte tam tedy tento kód:
if ($recordValues["orderState"] == "osSent" && $oldRecordValues["orderState"] != $recordValues["orderState"])
{
$records = getTable("m_shop_order_items")->getRecords("parent=".$recordValues["id"]);
foreach($records as $record)
{
$updateRecordValues = array(
"id" => $record["tableId"],
"stock" => "{isql: stock-1}",
);
getTable("m_shop_catalogue")->updateRecord($updateRecordValues);
}
}
Abych trochu vysvětlil, co je ve výše uvedeném kódu. V události jsou k dispozici proměnné
$oldRecordValues obsahující původní data záznamu před změnou a proměnná $recordValues obsahující nová data, která byla uložena na místo původního záznamu. Proto si v podmínce kontrolujeme, zda je hodnota pole
orderState =
osSent a současně, zda byla původní hodnota jiná (protože chceme vyskladnit pouze, když se stav objednávky změní).
V této podmínce pak načteme všechny záznamy objednaného zboží - tabulka m_shop_order_items vyfiltrované podle pole parent - obsahující identifikátor objednávky. V této tabulce je v poli
tableId uložen identifikátor samotné položky katalogu. Pomocí tohoto id pak upravíme množství snížením o 1 (použití {isql: stock-1} vygeneruje SQL dotaz: UPDATE m_shop_catalogue SET stock=stock-1 WHERE id='nejake_id' ).