Feedy - Konfigurátor - Dopravy a jejich omezení
Třetí strany, např. Google, mohou mít problém s chybnou minimální cenou za dopravu, pokud položka nelze danou dopravou přepravit. Typicky je to z důvodu přiliš vysoké hmotnosti nebo překročením povolených rozměrů. Rozlišujeme dvě úrovně omezení doprav. Hard a Soft.
Hard omezení kontroluje země, uživatelské skupiny, uživatelské typy, měnu a jazyk. Dopravy dostupné v poli deliveries
v konfigurátoru feedu automaticky splňují Hard omezení. V poli deliveries_all
se nachází všechny dopravy bez omezení.
Soft omezení zahrnují rozměrové limity, limity hmotnosti, objemu a hodnoty objednávky. Kontrola Soft omezení je však výpočetně náročnější, a proto se v našich výchozích šablonách feedů nekontrolují. V případě potřeby lze kontrolu vynutit úpravou konfigurace feedu. Jedná se o metodu checkRestrictions()
na objektu dopravy. Metoda kontroluje dopravu v kontextu dané produktové položky a vrací true
, pokud doprava limity splňuje, jinak vrací false
. Díky této metodě lze nepřípustné dopravy u konkrétních položek feedu vynechat.
Následuje ukázka JS kódu, který vytvoří tři globální (per položka feedu) proměnné:
deliveriesStrict
- seznam doprav splňující Hard i Soft omezení,lowestPriceStrict
- nejnižší cena dopravy splňující Hard i Soft omezení,lowestPriceCodStrict
- nejnižší cena dopravy s dobírkou splňující Hard i Soft omezení.
Kód níže můžete vložit do víceřádkového bloku na začátek konfigurace. Proměnné pak lze využívat kdekoliv níže v konfiguraci. Seznam deliveriesStrict
lze používat stejným způsobem jako běžně dostupný seznam deliveries
, a to včetně indexů (ID dopravy).
deliveriesStrict = utils.filter(deliveries, (d) => d.checkRestrictions(), false); lowestPriceStrict = null; lowestPriceCodStrict = null; for (const [key, d] of Object.entries(deliveriesStrict)) { if (d.final_price !== null && (lowestPriceStrict === null || lowestPriceStrict > d.final_price)) { lowestPriceStrict = d.final_price; } if (d.final_price_with_cod !== null && (lowestPriceCodStrict === null || lowestPriceCodStrict > d.final_price_with_cod)) { lowestPriceCodStrict = d.final_price_with_cod; } }
Alternativně lze problém řešit např. pomocí štítku Nadrozměr. V konfiguraci feedu lze potom u položek s tímto štítkem omezit dopravy třeba na jednu konkrétní.