Hledat:
Obsah fora > Visual PHP™ > Programování > Sklad v eshopu
Registrovat | Přihlásit
 

Sklad v eshopu

od (March 7, 2010 9:27:38 PM)

Dobrý den, zajímalo by me jak muzu udelat sklad v eshopu. Potreboval bych abych mohl evidovat kolik mam surovin na skladu a minimun. Tj. mam na sklade 200kusu kdyz klesne sklad pod 100 kusu tak aby to poslalo mail ale samozrejme abych mohl u kazdeho produktu nastavovat svoje minima
od: (Enterprise)

   
 

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' ).

od: (Technická podpora)

   
 

Sklad v eshopu

od (March 8, 2010 8:27:27 PM)

Zapomněl jsem na to posílání emailů při malém počtu kusů. Zde si už stačí pouze překontrolovat stav. Kód by šel upravit takto:

if ($recordValues["orderState"] == "osSent" && $oldRecordValues["orderState"] != $recordValues["orderState"])
{
    $records = getTable("m_shop_order_items")->getRecords("parent=".$recordValues["id"]);

    foreach($records as $record)
    {
        $record2 = getTable("m_shop_catalogue")->getRecord("id=".$recordValues["tableId"]);
        if (($record2["stock"]-1) < $record2["minStock"])
        {
            $Mail = getObject("Mail");
            $Mail->setRecipient("some@email.com");
            $Mail->setSubject("Málo kusů na skladě");
            $Mail->setBody("Na skladě je pouze ".($record2["stock"]-1)." ks výrobku ".$record2["name"]);
            $Mail->send();
        }

        $updateRecordValues = array(
            "id" => $record2["id"],
            "stock" => $record2["stock"]-1,
        );
        getTable("m_shop_catalogue")->updateRecord($updateRecordValues);
    }
}


od: (Technická podpora)

   
Pages: 1
 

Zpět na stránky Visual PHP™ | Product | Technical support | Version | Video exhibits | Manuals | Contact
Powered by: Visual PHP™ Forum
* Tato technická podpora není jen otázkou klienta a odpovědí tvůrce software. Slouží i jako fórum mezi Vámi, našimi klienty samotnými. Nebojte se reagovat na příspěvek, když znáte odpovědi. Vyměňujte si zkušenosti s produktem Visual PHP™. Systém Visual PHP™ je jedinečný a lze v něm provádět jednu operaci více způsoby. Pochlubte se ostatním, pokud naleznete nový a jednodušší způsob, jak určitou součást řešit. Pomáháte tím sami sobě a zároveň se spolupodílíte na rozvoji celého systému.