Post by DuCk » Wed Sep 17, 2014 8:42 pm

Zdravím,

řešíme problém, kdy má zákaznik nastavenou dopravu zdarma od 3000 Kč. Pokud někdo však nakoupí kolem té částky a použije voucher - celková cena spadne, stále je tam doprava zdarma.

Jak to řešit?

New member

Posts

Joined
Sun Jul 07, 2013 11:51 pm

Post by Reemon » Thu Sep 18, 2014 12:06 am

Pokud jsem to pochopil správně, tak máte problém s tím, že když člověk nakoupí za více jak 3000 (měl by dostat dopravu zdarma) a zároveň použije voucher, který mu tu cenu sníží pod 3000 a zůstane mu doprava zdarma což vy nechcete.

Jestli je to tedy správně, tak si myslím, že je to tím jakým způsobem se rozhoduje o dopravě zdarma. V OC to funguje tak, že při zadání dopravy se volá funkce getQuote(...) z catalog/model/shipping/<vase implemantace dopravy>.php, ve které se určí cena dopravy. Z pravidla jsem viděl, že se cena dopravy určuje podle $this->cart->geTotal() / $this->cart->getSubTotal() což vrátí mezisoučet s/bez DPH kde nejsou započítány žádné vouchery ani kupóny. To by potom znamenalo, že když zákazník má cenu zboží vyšší než 3000 tak se vám cena dopravy nastaví na 0 a potom v pozdějším počítání reálné celkové ceny se vám samozřejmě nezapočítá žádná doprava i když cena klesne pod 3000. Nevím přesně jak to máte vy, ale určitě bych hledal tady.

New member

Posts

Joined
Fri Mar 07, 2014 6:11 pm

Post by DuCk » Thu Sep 18, 2014 12:36 am

Přesně tak to je, jak by jste to navrhoval řešit?
Pro dopravu používám aktuálně toto rozšíření, jelikož umožňuje nastavit jinou cenu pro Slovensko. Funguje i na nové verzi, samozřejmě byl problém i v základním modulu, takže v rozšíření chybu nehledat.

Napadá mě doprogramovat tu cenu zdarma přímo do tohoto rozšíření s ohledem na vouchery.

New member

Posts

Joined
Sun Jul 07, 2013 11:51 pm

Post by Reemon » Thu Sep 18, 2014 3:17 am

Nezkoušel jsem to, ale nejspíš bych do souboru catalog/model/total/shipping.php přidal před

Code: Select all

$total_data[] = array( 
	'code'       => 'shipping',
	'title'      => $this->session->data['shipping_method']['title'],
	'text'       => $this->currency->format($this->session->data['shipping_method']['cost']),
	'value'      => $this->session->data['shipping_method']['cost'],
	'sort_order' => $this->config->get('shipping_sort_order')
);
něco takového

Code: Select all

if((isset($total_data['voucher']) || isset($total_data['coupon'])) && $total <= 3000) {
	$this->session->data['shipping_method']['cost'] = 0;
}
mělo by to fungovat tak, že když se bude dopočítávat cena, tak se podíváme jestli jsou zadané nějáké vouchery nebo kupóny a pokud ano tak zkontrolujeme jestli je celková cena menší než 3000. Pokud ano tak se přenastaví cena dopravného na zadarmo. Jinak tady cenu nastavuji natvrdo do kódu lepší řešení by bylo, načítat hodnotu z DB a v administraci umožnit nějakou editaci, také si nejsem jistý jestli hodnota uložená v $total je s nebo bez DPH, pokud je bez tak by se buď musela přepočítat a nebo limit pro dopravu zdarma napsat bez DPH.

New member

Posts

Joined
Fri Mar 07, 2014 6:11 pm

Post by Reemon » Thu Sep 18, 2014 3:21 am

Ještě jsem zapomněl, aby tenhle způsob fungoval tak se musíte ujistit, že v Admin->Extensions->Order Totals je Sort order(pořadí) od Voucher a Coupon před Shipping.

New member

Posts

Joined
Fri Mar 07, 2014 6:11 pm

Post by BooM Development » Fri Sep 19, 2014 5:04 am

Netreba na to žiadne úpravy v kódoch, iba správne logicky zoradiť celkové objednávky...

New member

Posts

Joined
Wed Nov 20, 2013 8:48 pm

Post by DuCk » Tue Sep 23, 2014 3:01 am

Pořadí jsem zkoušel horem dolem.

New member

Posts

Joined
Sun Jul 07, 2013 11:51 pm
Who is online

Users browsing this forum: No registered users and 5 guests