virtuemart "spropitné"

Odpověď od Cony
12. kvě 2021 15:14 #144328
Na ladění tohoto typu doporučuji n3t Debug :)
n3tDebug::barDump($var);
Každopádně, jestli se nepletu, je tam přesměrování, po volání plgVmOnUserOrder se děje redirect, proto to asi nic nevypíše...
n3tDebug by to odchytil.
Poděkovali: Ernst

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
12. kvě 2021 15:49 #144329

sorry, chybička, už mi to tudy prochází, chyba byla až za klávesnicí

Ještě se zeptám, existuje nějaký trigger, který by mi mohl vypisovat částku spropitného v košíku? Tedy nějaký, který se spustí při přepočtu ceny a při změně toho spropitného.


mě to taky odchytilo, dík za připomenutí n3tDebug.

Nějaký ten trigger pro zobrazení by jsi věděl?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
12. kvě 2021 19:12 #144330

Na ladění tohoto typu doporučuji n3t Debug


existuje nějaký návod?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
13. kvě 2021 16:09 #144340

Ernst napsal: Nějaký ten trigger pro zobrazení by jsi věděl?

To bys musel přes Javascript. A záleží pak jakých ckeckout používáš, jestli ten standardní z VM, nebo nějaký OPC.
Já tohle neřešil, dýžko se zadává až jako poslední a nechtěl jsem aby kvůli tomu ještě uživatel znovu čekal na překreslení stránky.

Ernst napsal: existuje nějaký návod?

Třída n3tDebug používá interně \Tracy\Debugger . Návod přímo k tomu pluginu do Joomly zatím není.
Poděkovali: Ernst

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
13. kvě 2021 22:05 - 13. kvě 2021 22:06 #144350
to je jasný že přes js, jen jsem myslel nějaký trigger který funkcí zavolá javascript.

Stačí mi to pro standardní košík bez opc

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
14. kvě 2021 02:00 #144351
No pak asi jednoduše onchange na tom inputu pro zpropitný...

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
17. kvě 2021 13:16 #144372

Cony napsal: No pak asi jednoduše onchange na tom inputu pro zpropitný...


nevím, zda by to stačilo, mělo by se to přepočíst i při změně množství v košíku, protože se spropitné zadává v procentech, ale tohle nechávám stranou, není nutné vidět tu hodnotu v košíku.

Základ mám hotový, až to bude komplet, napíšu to zde nebo do článku pro ostatní zájemce.

Mám ale problém, kam uvést hodnotu spropitného.
$spr = (int)$order->tip / 100 * $order->order_salesPrice;
$order->order_total += $spr;
Mi správně zvýší celkovou částku o to spropitné.
Nemohu však použít $order->order_billTaxAmount = $tip;, protože se zde pracuje s DPH a byl by v tom zmatek

Vytvořil jsem si vlastní daň TaxBill jako daň +, ale když do ní zapíšu spropitné, neuloží se, zůstane (nebo se přepíše) původní hodnota zadaná v dani.

Navíc mě udivuje, že ji nemohu ani uvést do poznámky objednávky,
$order->customer_note = $spr;
mi to do poznámky nezapíše

Nemáte někdo nápad, jak z toho ven?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
18. kvě 2021 14:50 #144373
Nemám teď čas to zkontrolovat, tak jen z hlavy
- pokud si pamatuju dobře, order_billTaxAmount právě DPH neobsahuje, je to daň na objednávku, nebo jak tomu ve VM říkají, prostě něco co v ČR neexistuje, proto jsem to použil a jen přetextoval, abych nemusel upravovat hromady šablon
- šlo by samozřejmě přidat si políčko do databáze, nebo možná radši samostatnou tabulku a zapisovat hodnoty tam. Zobrazení by pak ale asi bylo složitější, buď úpravou šablony, nebo nějakým VM pluginem (ale tím si nejsem úplně jistý), to už se ale začíná nebezpečně blížit tomu obecnýmu řešení :)
Poděkovali: Ernst

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
18. kvě 2021 15:10 - 18. kvě 2021 15:15 #144374
Bohužel $order->order_billTaxAmount právě obsahuje hodnotu DPH. Kdybych k ní spropitné přičetl byl by to zmatek, to nejde.

Vytvořil jsem si vlastní daň (TaxBill). V pluginu ji naplním spropitným, mám ji správně v orders.php v $_orderData, ale do objednávky se mi neuloží tato, ale ta původní (před změnou v pluginu).

jen pro zajímavost, kód je takhle:
public function plgVmOnUserOrder(&$order) {
        var_dump($order);
        $dane = json_decode($order->order_billTax);
        foreach ($dane as $key => $dan) {
            if ($dan->calc_name == "Spropitné") {
                $spr = (int)$order->tip / 100 * $order->order_salesPrice;
                $order->order_total += $spr;
                $dane->{$key}->result=$spr;
                $dane->{$key}->calc_value=$spr;
                $order->order_billTax = json_encode($dane);
            }
        }
        return true;
     }

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
18. kvě 2021 23:05 - 18. kvě 2021 23:05 #144375
tak jsem pokročil o něco dál
ono se to vše správně do order_billTax v tabulce virtuemart_orders vše správně zapíše (tedy spropitné jako další daň).
Problém je jinde. V objednávce (backend, frondend, email) se ta daň nezobrazí odtud, ale ze spárované tabulky virtuemart_order_calc_rules.
Když tam hodnotu daně (spropitného) změním přímo v databázi, ta objednávka se zobrazuje tak jak chci.
Ale nevíte někdo, jak nastavením VM nebo tím pluginem dosáhnu změny v této tabulce?

Nebo jak udělat přepis /administrator/components/com_virtuemart/models/orders.php, protože mám obavu, že až zde budu muset provést ten zápis a byl bych rád aby to bylo upgradeodolné?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
21. kvě 2021 10:32 #144385
Tak, plugin je hotov a funkční.
Trošku už se to začíná podobat out of box řešení, ale ještě vzdáleně.
Spropitné je přidáno jako daň typu TaxBill (Daň na účet). Tuto daň je nutné vytvořit ručně.
Vzhledem k tomu, že ji musím zapsat do tabulky virtuemart_order_calc_rules, tak pro její zápis používám ještě trigger plgVmConfirmedOrder.

Pro zadání výš spropitného slouží pole zákazníka. Zadání může být v % nebo jako částka v Kč.
Nevýhodou je, že částka spropitného se nezobrazuje v košíku, je až následně přidána k platbě. Možná tuto funkci ještě dodělám.

Pokud o toto řešení má někdo zájem, napište mi na email.
Poděkovali: Cony

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
21. kvě 2021 22:10 - 21. kvě 2021 22:10 #144392
Ještě mám jeden dotaz. Co se dá zjistit v orderdone.php, tedy poděkování za objednávku.?
V $this nenajdu třeba id objednávky, neznáte někdo způsob jak zjistit něco co není v $this?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
21. kvě 2021 22:41 #144393
Jojo, jeden z neduhů VM. VM z nějakého důvodu počítá s tím, že to vše řeší Payment plugin. To že pak při každém způsobu platby vypadá poděkování jinak, nebo že konverze je potřeba řešit u všech pluginů není nějak úplně domyšlené :)

Osobně opět řeším opět systémovým pluginem, který ukládá ID objednávky do application input a v order done jej čtu odtamtud a objednávku si znovu nahraju.

Plugin
  public function plgVmOnUpdateOrderPayment($data) {
    JFactory::getApplication()->input->set('virtuemart_order_id', $data->virtuemart_order_id);                
  } 

orderdone
$order_id = JFactory::getApplication()->input->get('virtuemart_order_id');
if (!empty($order_id)) {
  $orderModel = VmModel::getModel('orders');
  $order = $orderModel->getOrder($order_id);
  // konverze, poděkování a pod...
}
Poděkovali: Ernst

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
21. kvě 2021 22:53 - 21. kvě 2021 22:54 #144394
Super elegantní řešení, tohle bych asi nevymyslel.
Běží to ok.

Díky moc, jsem dlužník.

Bude se to hodit i na jindy, protože děkovná stránka je dost chudá a často si zaslouží trochu rozšířit.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
22. kvě 2021 23:52 - 22. kvě 2021 23:52 #144398
dovolím se ještě jednou zeptat, netušíte jak do sublayout addtocart.php dostanu objekt košíku?
Nebo zda to vůbec jde.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.