logo
20.03.2019 12:02
1
Řeším tu takový problémek - mám u zákazníka starý OpenCart 2, a mám tu importní můstek na objednávky z jiného systému - přímo do SQL, to je OK.

Nicméně bych potřeboval vyvolat PHPčkem proces notifikace, tj. jako kdyby přišla nová objednávka. Moje představa je, že to pustím přes nějaký controller a ID objednávky, něco jako

Kód:
$order = new Order(2142); // vyhledání objednávky
$order->notify(); // vyvolání notifikace
Ale tak hluboko OpenCart neznám, nevíte někdo? Případně i zaplatím
20.03.2019 12:11
2
A co myslíte tou notifikací? Odeslat email obsluze o přijetí objednávky?

Prakticky, při importu nové objednávky by jste měl využít model: catalog/model/checkout/order.php

Tam je funkce addOrder pro přidání objednávky do databáze. A pak funkce addOrderHistory, která přidá objednávce nějaký konkrétní stav a odešle příslušné notifikační emaily.

Alternativně, pokud nepoužíváte ten model, tak prostě pošlete email pomoci: system/library/mail.php. Např v té funkci addOrderHistory uvidíte vzor jak se s knihovnou mail zachází.
20.03.2019 12:14
3
Díky za odpověď, jsou tam 2 e-mail - obsluze i zákazníkovi. Pokud importuje napřímo do SQL, tak používám tabulky order, order_item, order_option, order_total a order_history. Takže teoreticky stačí nevyplnit order_history a vyvolat addOrderHistory i bez importu objednávky přes ten model?
20.03.2019 12:16
4
Původně odeslal Nabytkar
Řeším tu takový problémek - mám u zákazníka starý OpenCart 2, a mám tu importní můstek na objednávky z jiného systému - přímo do SQL, to je OK.

Nicméně bych potřeboval vyvolat PHPčkem proces notifikace, tj. jako kdyby přišla nová objednávka. Moje představa je, že to pustím přes nějaký controller a ID objednávky, něco jako

Kód:
$order = new Order(2142); // vyhledání objednávky
$order->notify(); // vyvolání notifikace
Ale tak hluboko OpenCart neznám, nevíte někdo? Případně i zaplatím
Je potrebne zavolat controller/api/order/addorder tahle funkce vloží novou obj. a také změní stavy včetně notifikace klientovi,
kbydy něco napište PM
20.03.2019 12:28
5
@peterniznik
addOrder emaily neodesílá, to dělá až funkce addOrderHistory.

@Nabytkar
Ano, pokud je objednávka už v databázi, tak by mělo stačit zavolat addOrderHistory($order_id, $order_status_id).
Kde $order_status_id je id stavu buď Processing 2, nebo Pending 1, nejsem si teď úplně jistý, tak vyzkoušejte jedničku i dvojku. Nebo se podívejte jaké id eshop používa pro stav "Objednávka přijata".
20.03.2019 12:31
6
@P8j6
jo má chyba psal jsem to z hlavy, správně je to controller/api/order/add kde tahle funkce má v sobě voláni addOrder a také addOrderHistory
20.03.2019 15:39
7
Díky oběma.

Díval, že /api/order/si stejně volá
Kód:
$this->model_checkout_order->addOrderHistory()
tedy metoda addOrderHistory není přímo v order, ale až v metodě add, kterou volat nemůžu, protože nemám data objednávky.

Tak jednodušše, tohle je verze 2.0.1.0, a netuším vůbec, co musím všechno inicializovat. Předpokládám, že pojedu podle index.php a v určité části ještě před dispatcherem to zaseknu a zavolám si addOrderHistory.
Ale netuším, co všechno OC vyžaduje (třeba Request a Response se mi zdají už zbytečné, ale neznám závislosti).

Můžu tedy mít poslední dotaz - před jakou inicializací v index.php můžu zavolat addOrderHistory a jak vytvořím objekt, ze kterého ji můžu volat?
20.03.2019 16:10
8
Psal jste že už máte hotový skript který vkládá objednávky do databáze. Kde ten skript sídlí? Je to klasický opencartovský controller. Nebo nějaký úplně nezávislý skript který není v controlleru ani v modelu?
20.03.2019 20:01
9
Právě že úplně nezávislý, OC obchází přímým přístupem do DB. U Prestashopu to znám, tam načtu config a init a mám rovnou inicializované prostředí, tak jsem vedle.
20.03.2019 20:41
10
Kdyby jste měl verzi 2.3.0.2. tak můžete použít startup.php podobně jak to děláte v prestě. Ale ve 2.0. to ještě vše jde přes index.

Vy stejně jen potřebujete odeslat email ne? Takže buď úplně jednoduše, ten mail prostě pošlete přes php, jak jste zvyklý, třeba pomoci funkce mail.

Nebo si udělejte v catalogu jednoduchý controller, např: catalog/controller/tool/utils.php

A do něho přijde něco v tomhle stylu (píšu to z hlavy, takže to asi nebude 100% funkční, ale pro představu):


PHP kód:

<?php
class ControllerToolUtils extends Controller {

    public function 
notify() {
        
$this->load->model('checkout/order');
    
        if (isset(
$this->request->get['order_id'])) {
            
$order_id intval($this->request->get['order_id']);
        } else {
            
$order_id 0;
        }

        if (
$order_$id 0) {
            
$this->model_checkout_order->addOrderHistory($order_id1);
        }
    }
}
A potom z vašeho skriptu můžete volat url adresu: index.php?route=tool/utils/notify&order_id=123

Ještě bych to samozřejmě celé zabezpečil nějakým tokenem, aby to nemohl z internetu zavolat žádný zaškodník.
21.03.2019 11:18
11
Super, tak je to funkční, bylo nutné ještě nastavit původní status objednávky na 0, jinak se přeposílal jenom info e-mail.
21.03.2019 11:37
12
Ano, tohle musí být první status co k objednávce příjde. Tím se odešlou všechny ty emaily o potvrzení objednávky, atd..
Super, hlavně že se povedlo.