RobertJunek Posted November 12, 2020 Share Posted November 12, 2020 Zdravím všechny, v okamžiku, kdy zákazníci vytvoří objednávku ve stejnou vteřinu, tak se nám vytvoří sice dvě objednávky s různým ID ale se stejnou referencí. Reference generujeme ve formátu "20" + IDobjednávky, níže uvedená funkce se mi tak zdá zbytčně složitá a generující problémy. Nebylo by podle vás prostě na tvrdo vzít id_order a před něj vložit řetězec se "20" a lze to tak vůbec udělat? Díky moc za radu/navedení public function getUniqReference() { $query = new DbQuery(); $query->select('MIN(id_order) as min, MAX(id_order) as max'); $query->from('orders'); $query->where('id_cart = '.(int)$this->id_cart); $order = Db::getInstance()->getRow($query); if ($order['min'] == $order['max']) { return $this->reference; } else { return $this->reference.'#'.($this->id + 1 - $order['min']); } } Link to comment Share on other sites More sharing options...
knacky Posted November 15, 2020 Share Posted November 15, 2020 (edited) Složitá ? To určitě není. Návod na vlastní formát čísla reference je zde od českého programátora zde. Edited November 22, 2020 by knacky (see edit history) Link to comment Share on other sites More sharing options...
RobertJunek Posted November 21, 2020 Author Share Posted November 21, 2020 On 11/15/2020 at 5:06 AM, knacky said: Složitá ? To určitě není. Návod na vlastní formát čísla reference je zde od českého programátora: Díky za odkaz. Problém ale generují objednávky, které proběhnou ve stejný čas; reálně se stává, že dva zákazníci objednají na vteřinu přesně. Tím, že se tahá poslední order id a z toho se generuje až následně reference, tak vzniká problém, že občas prostě dvě objednávky vzniklé ve stejný čas mají sice odlišné order id, ale stejnou referenci. Tam směřuje můj problém 😕 Link to comment Share on other sites More sharing options...
knacky Posted November 22, 2020 Share Posted November 22, 2020 (edited) Pokud script dělá problém, tak stačí upravit získání id_order z contextu. Např. id_order = $this->order->id; nebo id_order = Tools::getValue('id_order'); nebo odchytit číslo košíku a poté zjistit id_order ... Ve tvém případě je to na programátorský zásah, zde již nestačí Ctrl + C / Ctrl + V Edited November 22, 2020 by knacky (see edit history) Link to comment Share on other sites More sharing options...
Guest Posted November 23, 2020 Share Posted November 23, 2020 (edited) V Prestashopu je to tak, že při přidání prvního produktu do košíku se vytvoří v tabulce ps_cart záznam, tedy je již možné získat číslo košíku. V pokladně se vytvoří číslo objednávky až po odeslání formuláře, takže id_order se vytváří až tehdy. Toto zřizuje PaymentModule.php, který volá funkci new Order. Dále v Order.php se při vytvoření new Order volá funkce pro generování čísla reference. Je tedy možné při vytvoření new Order získat ihned id_order (buď jako insertID nebo $order->id), nebo pužít místo čísla objednávky číslo kiošíku. Takže v Order.php by se měla vytvořit nová funkce, která podle id_order zapíše do databáze číslo reference a odstřihne se vestavěná funkce pro generování čísla reference podle max id_order + 1. Script, který jsem dal k dispozici, s tím, že se ve stejnou chvíli provede více objednávek nepočítá a stejně jako vestavěná funkce používá max id_order. Nejlepší a nejjednodušší řešení je, naprogramování minimodulu, který se připojí k háčku actionValidateOrder a vytvoří číslo reference ještě před zobrazením potvrzovací stránky a odeslání emailu. Edited November 23, 2020 by Guest (see edit history) Link to comment Share on other sites More sharing options...
ps8modules Posted November 29, 2020 Share Posted November 29, 2020 Potvrzuji, že vlastní modul bez nějaké konfigurace je otázka 40 řádků kódu (včetně mezer) a není potřeba vytvářet override Order.php Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now