first commit

This commit is contained in:
2025-08-02 16:30:27 +02:00
commit 23646bfcee
14851 changed files with 1750626 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
{extends "index.tpl"}
{block "css-entry" append}
{encore_entry_link_tags entry='user'}
{/block}
{block "body"}
{block "title"}{/block}
{block "account-content"}{/block}
{/block}
{block "js-entry" append}
{encore_entry_script_tags entry='user'}
{/block}

View File

@@ -0,0 +1,160 @@
{extends 'account/orderView-inner.tpl'}
{block "orderview-top"}{/block}
{block "orderview-address"}{/block}
{block "order-note" append}
<div class="messages" data-reload="messages">
{if $body.failedDelivery}<div class="alert alert-danger" role="alert">{$body.failedDelivery nofilter}</div>{/if}
{if $body.failedProducts}
{$error = translate('error', 'order')}
{$error = $error.not_stocked_products}
{foreach $body.failedProducts as $product}
{$productName = "{$product['title']} {$product['variation_title']}"|trim}
{$message = str_replace('{PRODUCT}', $productName, $error)}
<div class="alert alert-danger outOfStock" role="alert">{$message nofilter}</div>
{/foreach}
{/if}
</div>
{/block}
{block "pieces"}
<div class="pieces">
{if $product.id_product and $body.editable}
{if $product.pieces >= 0}
{$step = $product.product.unit.step|default:1}
{ifmodule PRODUCTS__STEP}
{$data = $product.product->getData()}
{$step = $data.step|default:$step}
{/ifmodule}
<input type="number" name="pieces[{$product.id}]"
value="{$product.pieces|string_format:"%.{$product.product.unit.pieces_precision|default:0}f"}"
class="form-control" step="{$step}" min="{$step}" data-bv-excluded="true"
data-cart="pieces"
{if $module.PRODUCTS__UNITS_FLOAT}
data-precision="{$product.product.unit.pieces_precision|default:0}"
{/if}
>
<div class="buy_count">
<button type="button" class="fc plus" title="{t mnozstvi=$step}Přidat {mnozstvi} ks{/t}" data-cart="plus"
{* data-tracking-click='{get_gtm_data encode=true type='ecommerce' method='ClickAddToCart' data=['product' => $product.product, 'listType' => 'cart']}'*}
></button>
<button type="button" class="fc minus" title="{t mnozstvi=$step}Odebrat {mnozstvi} ks{/t}" data-cart="minus"
{* data-tracking-click='{get_gtm_data encode=true type='ecommerce' method='ClickRemoveFromCart' data=['product' => $product.product]}'*}
></button>
{if $module.PRODUCTS__UNITS_FLOAT}
<p class="ordering-product-units">{$product.product.unit.short_name|lower}</p>
{/if}
</div>
{else}
<input type="hidden" name="pieces[{$product.id}]" value="{$product.pieces}">
{$product.pieces} {t}Ks{/t}
{/if}
{elseif $product.id_product}
{$product.pieces} {t}ks{/t} {* todo unit *}
{/if}
</div>
{/block}
{block "orderview-price" append}
{if $product.id_product and $body.editable and $product.pieces > 0}
<a href="{url s=orderView acn=deleteItem IDo=$body.order.id IDi=$product.id edit=true}" class="delete-product"
{* data-tracking-click='{get_gtm_data encode=true type='ecommerce' method='ClickRemoveFromCart' data=['product' => $product.product, 'quantity' => $product.pieces]}'*}
title="{t}Odebrat produkt z košíku{/t}" data-cart="delete">
<span class="fc"></span>
</a>
{/if}
{/block}
{block "order-bonus-program" append}
{********* DÁREK, SLEVY **********}
<div data-reload="discount">
{foreach $body.order->getPurchaseState()->getDiscountHandlers() as $handler}
{$handler->render() nofilter}
{/foreach}
</div>
<div data-reload="price">
{/block}
{block "order-manuals" prepend}
</div>
{/block}
{block "orderview-history" prepend}
<div class="orderview-row">
<div class="column">
<p class="title-default">{t}Kontaktní údaje{/t}</p>
<ul>
<li><strong>{$body.order.invoice_name} {$body.order.invoice_surname}</strong></li>
<li>{$body.order.invoice_email}</li>
<li>{$body.order.invoice_phone}</li>
</ul>
</div>
{if $body.order.invoice_street}
<div class="column">
<p class="title-default">{t}Fakturační adresa{/t}</p>
<ul>
<li>{$body.order.invoice_street}</li>
{if $body.order.invoice_custom_address}
<li>{$body.order.invoice_custom_address}</li>
{/if}
<li>{$body.order.invoice_zip} {$body.order.invoice_city}</li>
{if $body.order.invoice_state}
<li>{$body.order.invoice_state}</li>
{/if}
{if $allCountries[$body.order.invoice_country]}
<li>{$allCountries[$body.order.invoice_country]->getName()}</li>
{/if}
</ul>
</div>
{/if}
{if $body.order.delivery_name || $body.order.delivery_surname || $body.order.delivery_street}
<div class="column">
<p class="title-default">{t}Dodací adresa{/t}</p>
<ul>
<li>{$body.order.delivery_name} {$body.order.delivery_surname}</li>
{if $body.order.delivery_firm and $body.order.delivery_firm != $body.order.delivery_name|cat:" "|cat:$body.order.delivery_surname}
<li>{$body.order.delivery_firm}</li>
{/if}
<li>{$body.order.delivery_street}</li>
{if $body.order.delivery_custom_address}
<li>{$body.order.delivery_custom_address}</li>
{/if}
<li>{$body.order.delivery_zip} {$body.order.delivery_city}</li>
{if $body.order.delivery_state}
<li>{$body.order.delivery_state}</li>
{/if}
{if $allCountries[$body.order.delivery_country]}
<li>{$allCountries[$body.order.delivery_country]->getName()}</li>
{/if}
{if $body.order.delivery_phone}
<li>{$body.order.delivery_phone}</li>
{/if}
</ul>
</div>
{/if}
{if $body.order.invoice_firm}
<div class="column">
<p class="title-default">{t}Firemní údaje{/t}</p>
<ul>
<li>{$body.order.invoice_firm}</li>
{if $body.order.invoice_ico}
<li>{t}IČO{/t}: {$body.order.invoice_ico}</li>
{/if}
{if $body.order.invoice_dic}
<li>{t}DIČ{/t}: {$body.order.invoice_dic}</li>
{/if}
</ul>
</div>
{/if}
</div>
{/block}

View File

@@ -0,0 +1,52 @@
{block utils}
{$isDealer = $ctrl.dealer == "Y"}
{if $ctrl}
{$isB2BUser = $ctrl->isType('b2b') scope='global'}
{$typeB2BUser = $ctrl->getType('b2b') scope='global'}
{/if}
{get_stats type='free_delivery' assign='free_delivery'} {* neni potreba key=$ctrl.currency? *}
{if isset($body.returnNav)}
{get_active_category returnNav=$body.returnNav assign='activeCategory'}
{$breadcrumbs = $activeCategory.breadcrumb|default:$body.returnNav.0}
{/if}
{block 'utils-end'}{/block}
{/block}
{block 'js-start'}
<script>
window.wpj = window.wpj || {ldelim}{rdelim};
wpj.onReady = wpj.onReady || [];
</script>
{include 'block.gtm.tpl' gtm_type='gtm'}
{/block}
{block css}
{block "css-entry"}
{encore_entry_link_tags entry='app'}
{encore_entry_link_tags entry='base'}
{encore_entry_link_tags entry='c-home'}
{/block}
{/block}
{block body}
{/block}
{block "js-end"}
{block "js-entry"}
{encore_entry_script_tags entry='app'}
{encore_entry_script_tags entry='base'}
{encore_entry_script_tags entry='c-home'}
{/block}
{block "js-dynamic-load"}
{* veci co se nedaji includovat do webpacku, protoze se `if`uji v sablone. Napr. preklady bootsrap validator, skript pro zasilkovnu, ... *}
{/block}
<script>
wpj.onReady.processAll();
{block onready}
{/block}
</script>
{/block}

View File

@@ -0,0 +1,191 @@
{get_contexts currency=1 language=1 country=1 assign="contexts"}
{$activeCountry = $contexts.country->getActive()}
{$activeCurrency = $contexts.currency->getActive()}
{$activeLang = $contexts.language->getActive()}
{if (isDevelopment() || isFrontendTests()) && $dbcfg.analytics.google_tag_manager.reallyRun != 'Y'}
{assign var="gtmId" scope="global" value='GTM-PFLLL74'}
{else}
{assign var="gtmId" scope="global" value=$dbcfg.analytics.google_tag_manager.ID}
{/if}
{if $smarty.get.skip_gtm !== null}
{assign var="gtmId" scope="global" value=false}
{/if}
<!-- OLD GTM !-->
{strip}
{if $gtmId}
{switch $gtm_type}
{case "gtm"}
{get_gtm_data assign='GTM'}
<script defer>
document.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
page_data = {$GTM|json_encode:32 nofilter};
page_data['page']['layout'] = window.innerWidth > 991 ? 'web' : window.innerWidth > 543 ? 'tablet' : 'mobil';
{* Standardni page data *}
dataLayer.push(page_data);
}, 0);
});
</script>
{if $GTM && $GTM.page->type == 'product'}
{* Pokud preklikavam mezi variantami, nebo se nacita stranka s produktem/variantou, posilat product impressions *}
<script src="{static_url url="/common/static/wpj/wpj.gtm.js"}?v2"></script>
<script>
var urlParams = new URLSearchParams(window.location.search);
var hash = location.href.split("#")[1] || urlParams.get('id_variation') || "{array_key_first($body.product.variations.variations)}";
{* Variation impressions *}
{if $body.product && $body.product.variations.variations|count}
{* Pole pro pripravu dat pro varianty *}
gtm_prva = { };
{* Zakladni data stranky *}
{get_price_computer assign='priceComputer'}
{foreach $body.product.variations.variations as $variation}
{if $variation.delivery_time_index != '-1'}
gtm_prva[{$variation.id}] = {
'id': '{$body.product.id}_{$variation.id}',
'idVariation': '{$variation.id}',
'idProduct': '{$body.product.id}',
'EAN': '{$variation.ean}',
'variationName': '{$variation.title|trim|escape:javascript}',
'code': '{$variation.code}',
'price': {$priceComputer->getPrice($variation.productPrice)},
'variationCode': '{$variation.variationCode}',
'productCode': '{$body.product.productCode}',
};
{/if}
{/foreach}
{* Odeslani impressions *}
wpj.onReady.push(function () {
$('input[name^=IDvariation], select#IDvariation').on('change', function () {
gtm_getDetailImpressions($(this).val(), 'detailImpressionsVariation');
});
if (hash != "") {
variation = gtm_getVariation(hash);
product = $.extend(page_data['products'], variation);
page_data = $.extend(page_data, { 'products': product });
}
gtm_getDetailImpressions(hash, 'detailImpressions');
});
{else}
{* Product impressions *}
gtm_getDetailImpressions(hash, 'detailImpressions');
{/if}
</script>
{/if}
{if $body.steps}
{get_gtm_data type='ecommerce' method='Checkout' assign='ecommerce' data=['body' => $body]}
{/if}
{if $body.orderSent}
{get_gtm_data type='ecommerce' method='Purchase' assign='ecommerce' data=['body' => $body]}
{/if}
{if $slider}
{get_gtm_data type='ecommerce' method='PromotionImpression' assign='ecommerce' data=['slider' => $slider]}
{/if}
{if $GTM && $GTM.page->type === 'searchResult'}
{get_gtm_data type='ecommerce' method='SearchResult' assign='ecommerce'}
{/if}
{if $ecommerce}
<script defer>
document.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
dataLayer.push({$ecommerce|json_encode:32 nofilter});
}, 0);
});
</script>
{/if}
{block dataLayerBlock}
{function pushAnalyticsSession}
{get_session_value type=$type remove=true assign=value}
{if $value}
<script>
window.dataLayer.push({
event: 'success{$type|ucfirst}'
{if is_array($value)},'data':{$value|json_encode:32 nofilter}
{elseif $value !== true}, 'value': '{$value}'{/if}
});
</script>
{/if}
{/function}
{function pushAnalyticsSessionAssign}
{get_session_value type=$type remove=true assign=value}
{if $value && is_array($value)}
<script>
window.dataLayer.push(Object.assign({ }, {
event: 'success{$type|ucfirst}',
}, {$value|json_encode:32 nofilter}));
</script>
{/if}
{/function}
{pushAnalyticsSession type="login"}
{pushAnalyticsSession type="logout"}
{pushAnalyticsSession type="registration"}
{pushAnalyticsSessionAssign type="newsletterSubscribe"}
{/block}
{/case}
<script>
{case "form_conversion"}
var formData = { };
$.each($this.serializeArray(), function() {
formData[this.name] = this.value;
});
dataLayer.push({
event: "successSendForm",
formData: formData
});
{/case}
</script>
{case "addToCart"}
{if $dbcfg.analytics.google_tag_manager.active_fe_events != 'Y'}
{get_gtm_data method='AddToCart' type='ecommerce' assign='ecommerce' data=['addedToCart' => $addedToCart]}
<script>dataLayer.push({$ecommerce|json_encode:32 nofilter});</script>
{/if}
{/case}
{case "addToWishList"}
{get_gtm_data method='AddToWishList' type='ecommerce' assign='ecommerce' data=['addedToWishList' => $addedToWishList]}
<script>
dataLayer.push({$ecommerce|json_encode:32 nofilter});
</script>
{/case}
{case "dummy"}
{* Dummy case, protoze nemuze bejt pred {/switch} nebo {default} jako posledni </script>, pada to pak na kompilaci. *}
{/case}
{default}
{if $slider}
{get_gtm_data type='ecommerce' method='PromotionImpression' assign='ecommerce' data=['slider' => $slider]}
{/if}
{if $ecommerce}
<script defer>
document.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
dataLayer.push({$ecommerce|json_encode:32 nofilter});
}, 0);
});
</script>
{/if}
{/switch}
{/if}
{/strip}

View File

@@ -0,0 +1,58 @@
{* upravený fallback *}
<div class="row {$row_class|default:'catalog-row'}" {if $body.pager}data-page="{$body.pager.number}"
data-products-row{/if}
data-tracking-view='{get_gtm_data encode=true type='ecommerce' method='ProductsImpressions' data=['products' => $products, 'listType' => $listType, 'listId' => $listId]}'>
{$products->fetchVariations(true)|silent}
{$collectionProducts = $products->fetchCollections()}
{$tmp = $products->fetchProductLabels('list')}
{foreach $smarty.get.dynamic_filter.variations as $var_filter}
{if $var_filter.value|count == 1}
{$var_filter_active = true}
{/if}
{/foreach}
{foreach $products as $product}
{if $body.filter_active and $product.matched_id_variation and $var_filter_active}
{$hash = "#`$product.matched_id_variation`"}
{else}
{$hash = ''}
{/if}
<div class="{$catalog_class|default:'col-xl-3 col-sm-4 col-xxs-6'}">
<div class="catalog-outer">
<div class="catalog">
<a href="{url s=product IDproduct=$product.id TITLE=$product.title}" class="product-link"
data-tracking-click='{get_gtm_data encode=true type='ecommerce' method='ProductClick' data=['product' => $product, 'position' => $product@iteration, 'listType' => $listType, 'listId' => $listId]}'>
<div class="img">
<img src="{get_photo photo=$product.image size='product_catalog'}"
width="{$cfg.Photo.types.product_catalog.size[0]}" height="{$cfg.Photo.types.product_catalog.size[1]}"
class="img-responsive" alt="{$product.title}">
</div>
<p class="delivery delivery-{$product.deliveryTime}">
{$product.deliveryTimeText}
</p>
<p class="title">
{$product.title nofilter}
</p>
<p class="price">
{if $discount.priceOriginal}
<del class="strike-price">{$discount.priceOriginal|format_price}</del>
{/if}
<strong>
{$product.price_array|format_price}
</strong>
</p>
</a>
{include "block.products.variations.tpl"}
</div>
</div>
</div>
{/foreach}
</div>

View File

@@ -0,0 +1,29 @@
{ifmodule BONUS_PROGRAM}
{get_bonus_points cart=$body assign=get_points}
{* todo prestat pouzivat tridu bonus-program-cart - na X shopech predelat na bonus-points-cart *}
{if $get_points->isPositive()}
<div class="bonus-program-cart bonus-points bonus-points-cart" data-reload="cart-benefit">
<p>
<span class="fc icons_trophy"></span>
{* @formatter:off *}
{$points = $get_points->asFloat()}
{if $ctrl.logged}
{t
plural="Za nákup tohoto zboží získáte <strong>{$points} body</strong> do věrnostního programu."
plural5="Za nákup tohoto zboží získáte <strong>{$points} bodů</strong> do věrnostního programu."
count=$points pocet=$points escape=false}
Za nákup tohoto zboží získáte <strong>{pocet} bod</strong> do věrnostního programu.
{/t}
{else}
{t
plural="Po <a href=\"\" class=\"cart-signin\">přihlášení</a> nebo <a href=\"{url s=user act=new}\">registraci</a> získáte za nákup tohoto zboží <strong>{$points} body</strong> do věrnostního programu."
plural5="Po <a href=\"\" class=\"cart-signin\">přihlášení</a> nebo <a href=\"{url s=user act=new}\">registraci</a> získáte za nákup tohoto zboží <strong>{$points} bodů</strong> do věrnostního programu."
url_registrace={url s=user act=new} pocet=$points count=$points escape=false}
Po <a href="" class="cart-signin">přihlášení</a> nebo <a href="{url_registrace}">registraci</a> získáte za nákup tohoto zboží <strong>{pocet} bod</strong> do věrnostního programu.
{/t}
{/if}
{* @formatter:on *}
</p>
</div>
{/if}
{/ifmodule}

View File

@@ -0,0 +1,6 @@
{extends_parent}
{block "logo"}
<img src="{static_url url="/system-images/logo.png" absolute=1}" alt="{$dbcfg.shop_firm_name}"
style="border:0;display: block;margin-bottom: 20px;text-align: center;" class="img-responsive logo"/>
{/block}

View File

@@ -0,0 +1,68 @@
{extends "focus/focus.base.tpl"}
{block "focus-title"}
{$title}
{/block}
{block "focus-content"}
<div class="cart-gift-row row">
{$giftPreselected = false}
{foreach $products as $product}
{$variations = $product->variations}
{$gift_preselect = false}
{if ($data.preselect_first == 1 || $tpl_vars.gift_preselect_first) && $frontend_data.gift === null && $product@first}
{$gift_preselect = true}
{$giftPreselected = true}
{/if}
<div class="{$tpl_vars.gift_col}">
<div class="cart-gift-item custom-control custom-radio custom-radio-lg" data-gift-item="{$id_action}">
{if $variations}
<input type="radio" name="{$name}[id_product]" value="{$product.id}" class="custom-control-input"
data-gift-product {if ($frontend_data.id_product==$product.id && $frontend_data.gift != 0) or $gift_preselect}checked{/if}>
{else}
<input type="radio" name="{$name}[gift]" value="{$product.id}" class="custom-control-input"
data-gift-product {if $product.id == $frontend_data.gift or $gift_preselect}checked{/if}>
{/if}
<span class="custom-control-indicator c-indicator"></span>
<img src="{get_photo photo=$product.image size=$tpl_vars.gift_img_size}"
alt="{$discount.product.title}">
<div class="text-wrapper">
<div class="text">
<p>{$product.title}</p>
{if $tpl_vars.gift_show_free_price == true or $price->getPriceWithVat()->isPositive()}
<strong>{if $price->getPriceWithVat()->isZero()}{t}zdarma{/t}{else}{$price|format_price}{/if}</strong>
{/if}
</div>
{if $variations}
<div class="cart-gift-variations">
<select name="{$name}[gift]" class="form-control" data-gift-variation{if !(($frontend_data.id_product==$product.id && $frontend_data.gift != 0) or $gift_preselect)} disabled{/if}>
{foreach $variations as $variation}
<option value="{$variation.id}" {if $variation.id == $frontend_data.gift
or ($gift_preselect and $variation@first)}selected{/if}>{$variation.title}</option>
{/foreach}
</select>
</div>
{/if}
</div>
</div>
</div>
{/foreach}
{block "unwanted-gift"}
<div class="{$tpl_vars.gift_col}">
<div class="cart-gift-item custom-control custom-radio custom-radio-lg" data-gift-item="{$id_action}">
<input type="radio" name="{$name}[gift]" value="0" class="custom-control-input" data-gift-product
{if (!$giftPreselected && $frontend_data.gift === null) || ($frontend_data.gift !== null && $frontend_data.gift == 0)}checked{/if}>
<span class="custom-control-indicator c-indicator"></span>
<strong>{t}Nechci dárek{/t}</strong>
</div>
</div>
{/block}
<div class="col-xxs-12 text-center">
<button type="button" data-gift-submit class="btn btn-primary">{t}Potvrdit{/t}</button>
</div>
</div>
{/block}

View File

@@ -0,0 +1,14 @@
{extends "base.tpl"}
{block "body"}
{block "main-prefix"}{/block}
{block "main"}
<main class="main container {block "main-class"}{/block}" {block "main-data-attributes"}{/block}>
{block "content"}
{/block}
</main>
{/block}
{/block}

View File

@@ -0,0 +1,67 @@
{extends "orderView.tpl"}
{block "body"}
<form method="post" id="cart">
<h1>{t}Objednávka č.{/t} {$body.order.order_no}</h1>
<div class="c-alert c-alert-warning">
{t}Proveďte změny v objednávce a poté klikněte Potvrdit změny.{/t}
</div>
<div class="orderview-buttons">
{insert_cart_info return='cartInfo'}
{if $cartInfo.cartInfo.totalProducts > 0}
<button class="btn btn-outline" type="submit" name="acn" value="addCart">{t}Přidat obsah z košíku{/t}</button>
{/if}
<button class="btn btn-outline" type="submit" name="acn" value="cancel">{t}Zrušit editaci{/t}</button>
<button class="btn btn-error" type="submit" name="acn" value="storno" title="{t}stornovat objednávku{/t}">{t}Stornovat{/t}</button>
<button class="btn btn-ctr" type="submit" name="acn" value="send">{t}Potvrdit změny{/t}</button>
<button class="btn btn-primary" style="display: none;" type="submit" name="acn" value="setPieces">{t}Přepočítat{/t}</button>
</div>
{include "account/orderViewEdit-inner.tpl"}
</form>
{/block}
{block "js-dynamic-load" append}
<script src="/common/static/wpj/wpj.cart.js"></script>
{/block}
<script>
{block onready append}
var $cart = $('#cart');
$cart.cart();
$cart.on('click', 'button[value=storno]', function() {
return confirm('{t}Opravdu chcete stornovat celou objednávku?{/t}');
});
$cart.on('change', '[data-cart="pieces"]', function() {
var $input = $(this);
var step = parseFloat($input.attr('step'));
var value = $input.val();
if (value < 0)
$input.val(step);
if (value % step > 0) {
var newVal = Math.round(value / step) * step;
if (newVal <= 0)
newVal = step;
$input.val(newVal);
}
});
$cart.on('keydown', '.pieces input.form-control', function(e) {
if (e.keyCode === 13) {
e.preventDefault();
$(this).blur();
}
});
{/block}
</script>

View File

@@ -0,0 +1,53 @@
{extends "index.tpl"}
{block "css-entry" append}
{encore_entry_link_tags entry='user'}
{/block}
{block css append}
<link rel="stylesheet" href="/common/static/bootstrapvalidator/css/bootstrapValidator.min.css">
{/block}
{block content}
<div class="page-orderstatus">
<h1 class="text-center">Stav objednávky</h1>
{if $body.order}
<div class="show_order_status html-page">
<p><strong>Číslo objednávky:</strong> {$body.order.id}<br>
<strong>Stav objednávky:</strong> {$body.order.status_text} (co který stav znamená naleznete <a
href="/stav-vyrizeni-objednavky_p10.html" target="_blank">zde</a>)</p>
<a href="{url s=orderStatus}" class="btn btn-outline">Zpět</a>
</div>
{else}
{include 'block.messages.tpl'}
<form action="{$ctrl.currUrl.Abs}" method="post" class="get_order_status" role="form">
<input type="text" name="IDo" value="{$body.IDo}" id="IDo" class="form-control disable-spinner" data-bv-notempty="true" placeholder="Zadejte číslo objednávky">
{include "block.recaptcha.invisible.tpl"}
{captchaBtn text="{t}Zjistit stav{/t}" class="btn btn-primary"}
</form>
{insert_page code="order-status-page"}
{/if}
</div>
{/block}
{block "js-dynamic-load" append}
{asset_compile}
<script src="/common/static/bootstrapvalidator/js/bootstrapValidator.js"></script>
<script src="/common/static/bootstrapvalidator/js/language/{$ctrl.active_language_code}.js"></script>
{/asset_compile}
{captchaScript}
{/block}
<script>
{block onready append}
$('form[role=form]').bootstrapValidator({
feedbackIcons: {
valid: 'fc fc-check',
invalid: 'fc fc-remove',
validating: 'fc fc-refresh'
}
});
{/block}
</script>

View File

@@ -0,0 +1,21 @@
{extends "index.tpl"}
{block "css-entry" append}
{encore_entry_link_tags entry='cart'}
{if $ctrl.logged}
{encore_entry_link_tags entry='user'}
{/if}
{/block}
{block "body"}
<h1>{t}Objednávka č.{/t} {$body.order.order_no}</h1>
{include "account/orderView-inner.tpl"}
{/block}
{block "js-entry" append}
{encore_entry_script_tags entry='cart'}
{if $ctrl.logged}
{encore_entry_script_tags entry='user'}
{/if}
{/block}

View File

@@ -0,0 +1,37 @@
{ifmodule BONUS_PROGRAM}
{if $ctrl.id and $activePoints}
<p class="title-default">{t}Uplatnit body{/t}</p>
<div class="cart-bonuspoints-picker">
<div>
<p>{t}Máte celkem{/t}
<strong>{$activePoints} {t plural="body" plural5="bodů" count=$activePoints}bod{/t}</strong>.</p>
<p>1 {t}bod{/t} = {$data.discount|format_price:"currency={$data.unit};ceil=no;decimal=dynamic"}</p>
</div>
<div class="submit-group {if $bonus_points}active{/if}">
{if !$bonus_points}
{get_used_bonus_points assign='usedBonusPoints'}
{$maxActivePoints = max($activePoints - $usedBonusPoints, 0)}
<input type="number" id="bonus_points_picker" name="{$name}[bonus_points]" value="{$bonus_points}"
class="form-control" min="0" step="1" max="{$maxActivePoints}" title="{t}Počet bodů{/t}"
data-bv-excluded="true" placeholder="{block "cart-bonuspoints-picker-placeholder"}{/block}" {if $maxActivePoints == 0}disabled{/if}>
<input class="btn btn-primary" type="submit" name="BonusProgramDiscount" value="{t}Použít body{/t}" {if $maxActivePoints == 0}disabled{/if}>
{else}
<span>{* todo preklad celeho stringu *}
{t}Uplatnili jste{/t} <strong>{$bonus_points}</strong> {t plural="body" plural5="bodů" count=$bonus_points}bod{/t}.
</span>
<input type="hidden" name="{$name}[bonus_points]" value="{$bonus_points}" data-bonuspoints="input">
<button type="submit" name="BonusProgramDiscount" class="delete"
data-bonuspoints="delete">{t}zrušit{/t}</button>
<script>
wpj.onReady.push(function() {
{* todo dat do externiho JS *}
$('[data-bonuspoints="delete"]').on('click', function() {
$(this).siblings('[data-bonuspoints="input"]').val(0);
});
});
</script>
{/if}
</div>
</div>
{/if}
{/ifmodule}

View File

@@ -0,0 +1,97 @@
{block "tpl-vars-gift"}
{$tpl_vars.gift_img_size = 12}
{$tpl_vars.gift_col = "col-xxs-12"}
{$tpl_vars.gift_preselect_first = false} {* zaskrtnuti prvni moznosti pri prvnim prichodu do kosiku *}
{$tpl_vars.gift_show_free_price = true}
{/block}
{if count($products)}
<div class="cart-gift" data-gift="{$id_action}">
<script>
document.body.classList.remove('focus-opened');
document.body.classList.remove('focus-transition');
</script>
{block "gift-list"}
<div class="cart-gifts-header">
<p class="title-default">{$title}</p>
{if $frontend_data.gift or ($data.preselect_first == 1 and $frontend_data.gift === null)}
<a href="" data-focus-opener="orders-gifts-{$title|strip_accent}-{$id_action}">{t}Změnit dárek{/t}</a>
{/if}
</div>
<div class="cart-gift-inner">
<span class="fc icons_gift"></span>
{if $frontend_data.gift or ($data.preselect_first == 1 and $frontend_data.gift === null)}
{$products->fetchMainImages($tpl_vars.gift_img_size)}
{foreach $products as $product}
{if ($frontend_data.gift == $product.id or $frontend_data.id_product == $product.id) or ($data.preselect_first == 1 and $frontend_data.gift === null and $product@first)}
{$variations = $product->variations}
<figure>
<img src="{get_photo photo=$product.image size=$tpl_vars.gift_img_size}"
alt="{$discount.product.title}" class="img-responsive">
</figure>
<div class="text-wrapper">
<p class="cart-gift-title">
<strong>{$product.title}</strong>
{if $variations[$frontend_data.gift]}
<span class="variation">{$variations[$frontend_data.gift].title}</span>
{elseif $variations}
{$variation = $variations|reset}
<span class="variation">{$variation.title}</span>
{/if}
</p>
{if $tpl_vars.gift_show_free_price == true or $price->getPriceWithVat()->isPositive()}
<strong class="cart-gift-price">{if $price->getPriceWithVat()->isZero()}{t}zdarma{/t}{else}{$price|format_price}{/if}</strong>
{/if}
</div>
{/if}
{/foreach}
{else}
<div class="text-wrapper">
<p>{t}Máte nárok na dárek k objednávce.{/t}</p>
<a href="" data-focus-opener="orders-gifts-{$title|strip_accent}-{$id_action}" class="btn btn-primary">{t}Vybrat dárek{/t}</a>
</div>
{/if}
</div>
{include "focus/orders-gifts.tpl" class="orders-gifts-{$title|strip_accent}-{$id_action}" title=$title products=$products}
{/block}
<script>
wpj.onReady.push(function() {
var $gifts = $('[data-gift]');
$gifts.on('click', '[data-gift-item]', function() {
var $input = $(this).find('[data-gift-product]');
if (!$input.is(':checked')) {
$input.prop('checked', true);
$(this).find('[data-gift-variation]').each(function () {
$(this).prop('disabled', false);
});
}
$(this).closest('[data-gift]').find('[data-gift-product]').each(function() {
if ($(this).val() !== $input.val()) {
$(this).prop('checked', false);
$(this).closest('[data-gift-item]').find('[data-gift-variation]').each(function () {
$(this).prop('disabled', true);
});
}
});
});
$gifts.on('change', '[data-gift-variation]', function() {
return false;
});
$gifts.on('click', '[data-gift-submit]', function (e) {
e.preventDefault();
console.log($(this));
$(this).addClass('is-submitting');
var $gift = $(this).closest('[data-gift]').find('[data-gift-product]:checked');
$gift.trigger('change');
});
});
</script>
</div>
{/if}

View File

@@ -0,0 +1,41 @@
{* upravený fallback *}
{extends_parent}
{block "cart-header"}
{ifmodule ORDER_DISCOUNT}
{insert_discounts_actions cart=$body type='full' new_structure=true assign='discountsActions'}
{/ifmodule}
{/block}
{block "cart-title"}
{if $body.products|count > 0}
<h1 data-reload="cart-title">{$view->getTitle()}<span class="count"><span data-reload="cart-pieces-header">({$body.totalPieces})</span></span></h1>
{/if}
{/block}
{block "shipping-progress"}{/block}
{block "sidebar-pricebox" append}
<div class="summary-sidebar-shipping-progress" data-reload="shipping-bar">
{include "components/shipping-progress.tpl" cartPrice=$body->getTotalPriceForDelivery()->getPriceWithVat(false)}
{block "custom-content"}
{/block}
<div class="order-badges">
{if $body->getAvailability() == 1}
{get_delivery_dates purchaseState=$body->getPurchaseState() assign='deliveries'}
{if $deliveries.min.delivery}
<p><span class="fc icons_calendar"></span>{t date=$deliveries.min.delivery|format_date_locale_pretty:'d. L.':null:true escape=false}Můžete mít již <strong>{date}</strong>{/t}</p>
{/if}
{/if}
{ifmodule BONUS_PROGRAM}
{include "bonus-program/bonus-program-cart.tpl"}
{/ifmodule}
</div>
</div>
{/block}
{block "cart-also_bought"}
{/block}

View File

@@ -0,0 +1,7 @@
{extends_parent}
{block "content"}
<div data-gtm-placeholders="{gtm_twig_compat_cart_items data=['view' => $view]}">
{$smarty.block.parent}
</div>
{/block}

View File

@@ -0,0 +1,35 @@
{* upravený fallback *}
{extends_parent}
{block "main"}
{block "tpl-vars"}
{$body.stepName = 5}
{$body.steps[0] = [title => 'Košík']}
{$body.steps[1] = [title => 'Doprava a platba']}
{$body.steps[2] = [title => 'Dodací údaje']}
{$body.steps[3] = [title => 'Souhrn']}
{/block}
<main class="main main-ordering-success">
{block 'order-process'}
<div class="container-fluid order-process-container">
{include "ordering/ordering.process.tpl" last_step=true}
</div>
{/block}
<div class="container">
{change_currency currency=$body.order->currency}
{get_order_info type='conversion_sent' order=$body.order assign='conversion_sent'}
{if !isDebug() and $body.orderSent and ($conversion_sent or $smarty.get.force_conversion)}
{include "orderViewTracking.tpl"}
{/if}
<div class="page-ordersuccess {if $body.emailRegistered}logged{/if}">
{block "ordersuccess-text"}
{include "block.messages.tpl"}
{insert_page type="ORDER_SUCCESS" use_default=1}
{/block}
</div>
{/change_currency}
</div>
</main>
{/block}

View File

@@ -0,0 +1,36 @@
{* upravený fallback *}
{extends_parent}
{block "tpl-vars" append}
{$tpl_vars.delivery_country_picker = true}
{$tpl_vars.online_payment_visible_items = 1}
{$tpl_vars.delivery_collapsible = true}
{$tpl_vars.preselect_delivery = "false"}
{$tpl_vars.btns_in_sidebar = "true"}
{$tpl_vars.cart_sidebar = "true"}
{$tpl_vars.summary_title_in_first_step = true}
{$tpl_vars.ordering_products_discount = true}
{$tpl_vars.pricebox_cartsaving = true}
{/block}
{block 'order-process'}
<div class="container">
<div class="order-process-container">
{include "ordering/ordering.process.tpl"}
</div>
</div>
{/block}
{block "content-wrapper"}
{if $body.products|count > 0}
{$smarty.block.parent}
{else}
<div class="empty-cart" data-reload="cart">
<div>
<h1>Váš košík je prázdný</h1>
<p>Pojďme něco přidat.</p>
</div>
</div>
{insert_page code="empty-cart"}
{/if}
{/block}

View File

@@ -0,0 +1,16 @@
{extends_parent}
{block 'order-note'}
<div class="row">
<div class="col-xxs-12">
<div class="form-group">
<label for="noteUser">{t}Poznámka k objednávce{/t}</label>
<textarea name="noteUser" rows="5" id="noteUser" class="form-control">{$body.note}</textarea>
</div>
</div>
</div>
{/block}
{block "js-entry" append}
{include "components/block.smartForm.tpl"}
{/block}

View File

@@ -0,0 +1,3 @@
{extends_parent}
{block "set-image"}{/block}

View File

@@ -0,0 +1,35 @@
{extends_parent}
{block "pricebox-order-discount"}
<div class="price-box-row discount">
<p>
{$discount->getName()}
{$discountNote = $discount->getNote()}
{if $discountNote.coupon and $body.coupons[$discountNote.coupon]}
{assign var="discountValue" value=$discountNote.coupon}
{elseif $discountNote.generated_coupon.code}
{assign var="discountValue" value=$discountNote.generated_coupon.code}
{/if}
{* todo - zkontrolovat bonus program (body) *}
{if ($discountNote.coupon and $body.coupons[$discountNote.coupon]) or $discountNote.generated_coupon.code}
<button type="button" name="DeleteDiscount" value="{$discountValue}" class="btn-discount-remove">
<span class="fc icons_trash"></span>
</button>
{/if}
</p>
<p>{if $noVat}{$discount->getPriceWithoutVat()|format_price:"ceil=no;decimal=dynamic"}
{else}{$discount->getPriceWithVat()|format_price:"ceil=no;decimal=dynamic"}{/if}</p>
</div>
{if $discountValue} {* discountValue = coupon or generated_coupon *}
{get_coupon_price coupon=$discountValue cart=$body assign=couponPrice}
{if $couponPrice && $couponPrice.remaining_coupon_price->isPositive()}
<p class="small">
Hodnota poukazu {$couponPrice.coupon_price|format_price:"ceil=no;decimal=dynamic"},
uplatněno {$couponPrice.used_coupon_price|format_price:"ceil=no;decimal=dynamic"},
zbývá {$couponPrice.remaining_coupon_price|format_price:"ceil=no;decimal=dynamic"}.
</p>
{/if}
{/if}
{/block}

View File

@@ -0,0 +1,40 @@
{* upravený fallback *}
{extends_parent}
{block 'image'}
{calc_product_discount product=$product.product assign='product_discount'}
{if $product_discount.discount->isPositive() and $product_discount.discount->asFloat() >= 1}
<span class="c-product-discountlabel">
-{$product_discount.discount->asFloat()|round}%
</span>
{/if}
<img src="{get_photo photo=$product.image size=$img_size}" alt="{$product.title}"
class="img-responsive" width="{$photo_dimensions[0]}" height="{$photo_dimensions[1]}">
{/block}
{block "piece-price"}{/block}
{block "product-sets" append}
{ifmodule PRODUCTS__SETS}
{if isset($product.note.sets) }
{insert_products_sets_cart note=$product.note}
{/if}
{/ifmodule}
{/block}
{block "cart-discounts-full"}
<div data-reload="cart-discounts-full">
{ifmodule ORDER_DISCOUNT}
{* načítání slev je v ordering.cart.tpl kvůli zobrazení na dvou místech - insert_discounts_actions *}
{foreach $discountsActions as $discountAction}
{if $discountAction.action_type != 'orders_charge'}
{$discountAction.content nofilter}
{/if}
{/foreach}
{/ifmodule}
</div>
{/block}
{block "shipping-progress-wrapper"}
{/block}

View File

@@ -0,0 +1,119 @@
<div class="summary-sidebar">
{block "sidebar-title"}
{if $body.stepName != 'cart'}
<p class="title-default"{if $body.products|count >= 4} data-opener="[data-summary-sidebar-products]"{/if}>
{t}Shrnutí{/t}
</p>
{else}
<div data-reload="cart-discounts-full-sidebar">
{ifmodule ORDER_DISCOUNT}
{* načítání slev je v ordering.cart.tpl kvůli zobrazení na dvou místech - insert_discounts_actions *}
{$hasOrdersCharges = false}
{foreach $discountsActions as $discountAction}
{if $discountAction.action_type == 'orders_charge'}
{$hasOrdersCharges = true}
{/if}
{/foreach}
{if $hasOrdersCharges}
<p class="title-default">{t}Služby k objednávce{/t}</p>
{foreach $discountsActions as $discountAction}
{if $discountAction.action_type == 'orders_charge'}
{$discountAction.content nofilter}
{/if}
{/foreach}
{/if}
{/ifmodule}
</div>
{/if}
{/block}
{block "user-manager-select"}
{ifmodule USER_MANAGER}
{if $ctrl.logged and $body.stepName == 'cart'}
{$users_select_title = "{t}Vyberte pobočku{/t}"}
{user_manager_insert_users_select title=$users_select_title activeOnly=true}
{/if}
{/ifmodule}
{/block}
{if $body.stepName != 'cart'}
{if $isLastStep}
<p class="check-order-msg">{t}Překontrolujte si košík a odešlete objednávku.{/t}</p>
{/if}
{block "sidebar-products"}
<div {if $body.products|count >= 4}data-summary-sidebar-products data-simplebar data-simplebar-auto-hide="false"{/if}>
<div class="summary-sidebar-productlist">
<div class="summary-sidebar-productlist-inner">
{if $body.products}
{include "ordering/ordering.summary.products.tpl" items=$body.products|array_reverse}
{else}
<p class="no-items">{t}V košíku nemáte žádné zboží.{/t}</p>
{/if}
</div>
</div>
</div>
{/block}
{/if}
{block "sidebar-delivery"}
{if $deliveryType}
<div class="summary-sidebar-delivery-wrapper">
{$delivery = $deliveryType->getDelivery()}
<div class="summary-sidebar-delivery">
{if $delivery}
{get_deliveries_dates cart=$body assign='deliveriesDates'}
{$date = $deliveriesDates[$delivery.id].date}
<p class="title">
{$delivery.name}
{if $date and $delivery->isInPerson()}
<br>
<span class="info">{t escape=false}k&nbsp;vyzvednutí{/t} {$date|format_date_locale_pretty:'d. L. Y'}</span>
{elseif $date}
<br>
<span class="info">{t}předpokládané doručení{/t} {$date|format_date_locale_pretty:'d. L. Y'}</span>
{/if}
</p>
<p class="price">
{$delivery.price.value_with_vat|format_price}
</p>
{/if}
</div>
{$payment = $deliveryType->getPayment()}
<div class="summary-sidebar-delivery">
<p class="title">
{if $payment}
{$method = $payment->getSelectedMethod()}
{if $method}
{$payment->getName() nofilter} - {$method.name nofilter}
{else}
{$payment->getName() nofilter}
{/if}
{else}
{$deliveryType->payment}
{/if}
</p>
<p class="price">
{$paymentPrice = $view->getPaymentPrice($payment.id)}
{if $paymentPrice != null}
{if $paymentPrice.value_with_vat->isPositive()}
{$paymentPrice.value_with_vat|format_price}
{else}
{t}zdarma{/t}
{/if}
{/if}
</p>
</div>
</div>
{/if}
{/block}
<div class="summary-sidebar-inner">
{block "sidebar-pricebox"}
{include "ordering/ordering.pricebox.tpl" transport=($body.stepName != 'cart')}
{if $tpl_vars.btns_in_sidebar}
{include "ordering/ordering.btns.sidebar.tpl" showVoucher=($body.stepName == 'cart')}
{/if}
{/block}
</div>
</div>

View File

@@ -0,0 +1,39 @@
{extends_parent}
{block 'image'}
{calc_product_discount product=$product.product assign='product_discount'}
{if $product_discount.discount->isPositive() and $product_discount.discount->asFloat() >= 1}
<span class="c-product-discountlabel">
-{$product_discount.discount->asFloat()|round}%
</span>
{/if}
<img src="{get_photo photo=$product.image size=4}" alt="{$product.title}"
class="img-responsive">
{/block}
{block "product-inline-addons"}{/block}
{block "product-extra-addons"}
{ifmodule PRODUCTS_CHARGES}
{include "ordering/ordering.product-charges.tpl" item=$product isCart=false hideDelete=true}
{/ifmodule}
{ifmodule PRODUCT_GIFTS}
{if $product.product.gifts}
<div class="cart-product-sets">
{get_product_gifts product=$product assign="gifts"}
{foreach $gifts as $gift_product}
<div class="set-item">
<div class="set-label">
+ {t}dárek{/t}
<a href="{url s=product IDproduct=$gift_product.id TITLE=$gift_product.title}" class="set-title">{if $gift_product.gift_pieces and $gift_product.gift_pieces > 1}{$gift_product.gift_pieces}x {/if}{$gift_product.title}</a>
</div>
<div class="set-price">
<strong>{t}zdarma{/t}</strong>
</div>
</div>
{/foreach}
</div>
{/if}
{/ifmodule}
{/block}

View File

@@ -0,0 +1,139 @@
{extends_parent}
{block "form-personal-data-address-title"}{/block}
{block 'delivery-place'}
{if $deliveryType}
{$delivery = $deliveryType->getDelivery()}
{if $delivery->getType() == Delivery::TYPE_POINT}
<p class="h4">{t}Adresa dodání{/t}</p>
<div class="cart-delivery-place">
<p><strong>{$delivery->getName()}</strong></p>
</div>
{/if}
{/if}
{/block}
{block "form-different-delivery"}
{ifmodule USER_ADDRESSES}
{if !$deliveryType || $deliveryType->getDelivery()->requiresDeliveryAddress()}
{get_addresses assign="user_addresses"}
{$cartData = $body->getData()}
{if $user_addresses}
{$inputData = ['updateCart' => true]}
{render_component name="Cart:HiddenAddressInput" data=$inputData assign="addressInput"}
{$addressInput nofilter}
{$selectData = ['selectedId' => $cartData.user_address_id, 'allowAddNew' => $dbcfg.edit_user_addresses]}
{render_component name="Cart:UserAddressSelect" data=$selectData assign="addressSelect"}
{$addressSelect nofilter}
{if $dbcfg.edit_user_addresses}
<div class="opener-content" id="different-address-content"
style="display:{if $cartData.user_address_id == 0}block{else}none{/if}">
{block 'form-delivery-address'}
<div class="row">
<div class="{$column_class}">
<div class="form-group required">
<label for="name">{t}Jméno{/t}</label>
<input type="text" name="cart_data[new_address][name]" id="name" class="form-control"
value="{$cartData.new_address.name}" autocomplete="off"
data-bv-notempty="true" data-bv-stringlength="true" data-bv-stringlength-min="3">
</div>
</div>
<div class="{$column_class}">
<div class="form-group required">
<label for="surname">{t}Příjmení{/t}</label>
<input type="text" name="cart_data[new_address][surname]" id="surname" class="form-control"
value="{$cartData.new_address.surname}" autocomplete="off"
data-bv-notempty="true" data-bv-stringlength="true" data-bv-stringlength-min="3">
</div>
</div>
<div class="{$column_class}">
<div class="form-group">
<label for="phone">{t}Telefon{/t}</label>
<input type="text" name="cart_data[new_address][phone]" id="phone" class="form-control" value="{$cartData.new_address.phone}" autocomplete="off" data-bv-phone="true"
{if !($deliveryType and $deliveryType->isInPerson()) || $inpersonRequireAddress}
data-bv-phone-country="cart_data[new_address][country]"
{else}
data-bv-phone-country="{$ctrl.active_country}"
{/if}>
</div>
</div>
<div class="{$column_class}">
{block "delivery-street"}
<div class="form-group required">
<label for="street">{t}Ulice a č.p.{/t}</label>
<input type="text" name="cart_data[new_address][street]" id="street" class="form-control smartform-instance-delivery smartform-address-street-and-number"
value="{$cartData.new_address.street}"{if $dbcfg.smartform == "Y" or $dbcfg.here_autocomplete == "Y"} autocomplete="off"{/if} data-field-delivery-street
data-bv-notempty="true" data-bv-regexp="true" pattern=".*\S+\s+[0-9]+.*|.*\S+[0-9]+\s+.*"
data-bv-regexp-message="{t}Doplňte prosím číslo popisné{/t}">
</div>
{/block}
</div>
<div class="{$column_class}">
<div class="zip-group">
<div class="form-group required">
<label for="city">{t}Město{/t}</label>
<input type="text" name="cart_data[new_address][city]" id="city" class="form-control smartform-instance-delivery smartform-address-city"
value="{$cartData.new_address.city}"{if $dbcfg.smartform == "Y" or $dbcfg.here_autocomplete == "Y"} autocomplete="off"{/if} data-field-delivery-city
data-bv-notempty="true" data-bv-stringlength="true" data-bv-stringlength-min="2">
</div>
<div class="form-group required">
<label for="zip">{t}PSČ{/t}</label>
<input type="text" name="cart_data[new_address][zip]" id="zip" class="form-control smartform-instance-delivery smartform-address-zip" value="{$cartData.new_address.zip}"
{if $dbcfg.smartform == "Y" or $dbcfg.here_autocomplete == "Y"} autocomplete="off"{/if} data-field-delivery-zip data-bv-notempty="true" data-bv-zipcode="true"
data-bv-zipcode-country="cart_data[new_address][country]">
</div>
</div>
</div>
{block "form-delivery-country"}
<div class="{$column_class}">
<div class="form-group required">
<label for="country">{t}Stát{/t}
{if $tpl_vars.delivery_country_picker}
<a href="/{$body.steps.delivery.url}" class="cart-country-link">{t}Jiný stát?{/t}</a>
{/if}
</label>
<select class="form-control" id="country" name="cart_data[new_address][country]" autocomplete="off"
{if $cfg.Order.Countries|count == 1 || $tpl_vars.delivery_country_picker}readonly{/if}>
{html_options options=$cfg.Order.Countries selected=$cartData.new_address.country|default:$ctrl.active_country}
</select>
</div>
</div>
{/block}
<div class="col-xxs-12">
<div class="form-group">
<label for="firm">{t}Upřesnění adresy (areál,...){/t}</label>
<input type="text" name="cart_data[new_address][firm]" id="firm" class="form-control"
value="{$cartData.new_address.firm}" autocomplete="off"
data-bv-stringlength="true" data-bv-stringlength-min="3">
</div>
</div>
<div class="col-xxs-12">
<div class="form-group">
<label for="cart_data[new_address][save]" class="custom-control custom-checkbox">
<input class="custom-control-input" type="checkbox" name="cart_data[new_address][save]"
id="cart_data[new_address][save]" value="1">
<span class="custom-control-indicator"></span>
{t}Uložit mezi adresy{/t}
</label>
</div>
</div>
</div>
{/block}
</div>
{/if}
{elseif $dbcfg.edit_user_addresses or !$ctrl.logged}
{$smarty.block.parent}
{/if}
{/if}
{elsemodule}
{$smarty.block.parent}
{/ifmodule}
{/block}

View File

@@ -0,0 +1,20 @@
{extends_parent}
{block "gopay-items-hidden"}
{if $method@index == ($tpl_vars.online_payment_visible_items|default:2 - 1) and $closed and !$method@last}
<div class="cart-box-row payment-item thepay-method payments-list">
<div>
{foreach $object->getAvailableMethods() as $name => $method}
{if $method@index > 1 and $method@index < 6}
<img src="{$method.image}" title="{$method.name}" alt="{$method.name}"
style="width: 60px; height: auto; margin: 5px 0;" class="payment-item-small">
{/if}
{/foreach}
</div>
<div>
<a href="" class="thepay-more btn {$tpl_vars.payment_more_class|default:"btn-primary"}" id="gopay-more"
title="{t}Zobrazit více platebních metod{/t}">{t}Více{/t}</a>
</div>
</div>
{/if}
{/block}

View File

@@ -0,0 +1,11 @@
{extends_parent}
{block "invoice-logo"}
{if $cfg.Addr.full_original} {* na locale *}
<img src="{$cfg.Addr.full_original}system-images/{$cfg.Modules.orders.invoice_logo|default:'logo.png'}"
alt="{$dbcfg.shop_firm_name}"/>
{else}
<img src="{$cfg.Addr.full}system-images/{$cfg.Modules.orders.invoice_logo|default:'logo.png'}"
alt="{$dbcfg.shop_firm_name}"/>
{/if}
{/block}

View File

@@ -0,0 +1,17 @@
{* upravený fallback *}
<div class="cart-multisets">
{foreach $set_products as $set_product}
<div class="set-item">
<div class="set-item-image">
<a title="{t}Zobrazit zboží{/t}" href="{url s=product IDproduct=$set_product.id TITLE=$set_product.title}">
<img src="{get_photo photo=$set_product.image size='product_cart'}" alt="">
</a>
</div>
<div class="set-item-title">
<a title="{t}Zobrazit zboží{/t}"
href="{url s=product IDproduct=$set_product.id TITLE=$set_product.title}">{$set_product.title}</a>
{if $set_product.variationTitle}<span>{$set_product.variationTitle}</span>{/if}
</div>
</div>
{/foreach}
</div>

View File

@@ -0,0 +1,12 @@
@import "@css[shared]/base/_mixins";
@mixin focus-header-title {
color: $headings-color;
font-family: $headings-font-family;
font-weight: $headings-font-weight;
line-height: $headings-line-height;
margin-bottom: $headings-margin-bottom;
text-transform: $headings-text-transform;
font-size: $font-size-h4;
}

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,54 @@
html,
body {
height: 100%;
min-height: 100%;
}
body {
display: flex;
flex-direction: column;
}
.container {
@include delete-after;
}
.main {
margin-bottom: 40px;
.container {
&::after {
content: "";
display: table;
clear: both;
}
}
}
.registration-submit .btn-primary {
width: 100%;
max-width: 390px;
}
.cart-footer {
display: flex;
.price-box {
max-width: 400px;
margin-left: auto;
width: 100%;
}
}
.orderview-history.orderview-history {
h1 {
font-size: 20px;
margin: 0;
padding: 3px 0;
}
p {
margin: 0;
padding: 3px 0;
}
}

View File

@@ -0,0 +1,22 @@
$registration-v: 2 !default;
$cart-v: 2 !default;
//$order-sidebar-v: 2;
$cart-user-v: 2 !default;
//$xxl: 1470px;
$delivery_collapsible: true !default;
$cart-btns-sidebar: true !default;
@import "@twig/scss/_global";
@import "@css[shared]/base/_variables";
$summary-siderbar-width: 435px;
$summary-siderbar-padding-left: 45px;
$cart-form-width: 1180px !default;
$cart-product-sets-padding: 94px !default;
$cartbox-sidebar-width: 480px;
$cartbox-alsobought-width: 245px;
$ordering-products-breakpoint: 1119px !default;

View File

@@ -0,0 +1,29 @@
@import "@css[common]/components";
@import "@css/components/catalog/_catalog";
@import "@css/components/catalog/_catalog-variations";
@import "@css/components/catalog/_catalog-row";
@import "@css/components/_alert";
//@import "@css/components/_btns";
@import "@css/components/_buy_count";
@import "@css/components/_delivery";
@import "@css/components/forms/_forms";
@import "@css/components/forms/_validation";
@import "@css/components/forms/_custom-control";
@import "@css/components/_shipping-progress";
@import "@css/components/_wpj-tooltip";
@import "@css/components/focus/_focus-base";
@import "@css[common]/components/focus/_focus-delivery-widgets";
@import "@css/components/focus/_focus-content";
@import "@css/modules/_shopping-lists";
@import "@css/page/order/_cart-bonuspoints-picker";
@import "@css/page/order/_cart-multisets";
@import "@css/page/_returns";
@import "@css/page/_reclamations";

View File

@@ -0,0 +1,110 @@
$oauth-box-margin: 0 0 2rem 0 !default;
$oauth-buttons-direction: row !default;
$show-oauth-buttons-text: "false" !default;
.oauth-box {
margin: $oauth-box-margin;
}
.oauth-buttons {
display: flex;
flex-wrap: wrap;
flex-direction: $oauth-buttons-direction;
gap: 20px;
a {
display: flex;
align-items: center;
text-decoration: none;
.icon {
background-color: $body-bg-alt;
background-repeat: no-repeat;
background-position: center;
border-radius: 50%;
width: 50px;
height: 50px;
display: inline-block;
border: $border-width solid transparent;
transition: border-color $transition-speed;
}
.text {
padding: 0 10px 0 15px;
line-height: 1.5;
span {
text-decoration: underline;
}
}
@include haf {
.icon {
border-color: $black;
}
.text {
span {
text-decoration: none;
}
}
}
}
.fb {
.icon {
$fb-icon: url('~@assets/icons/fb.svg') !default;
background-image: $fb-icon;
background-size: 13px;
}
}
.gp {
.icon {
$gp-icon: url('~@assets/icons/google.svg') !default;
background-image: $gp-icon;
background-size: 21px;
}
}
.apple {
.icon {
$apple-icon: url('~@assets/icons/apple.svg') !default;
background-image: $apple-icon;
background-size: 15px;
}
}
.sz {
.icon {
$seznam-icon: url('~@assets/icons/seznam.svg') !default;
background-image: $seznam-icon;
background-size: 15px;
}
}
.amazon {
.icon {
$amazon-icon: url('~@assets/icons/amazon.svg') !default;
background-image: $amazon-icon;
background-size: 30px;
}
}
}
@if ($show-oauth-buttons-text == "false") {
.page-user-new {
.oauth-buttons {
a {
.text {
display: none;
}
}
}
}
}

View File

@@ -0,0 +1,71 @@
$shipping-progress-bar-bg: $border-color !default;
$shipping-progress-bar: $brand-primary !default;
$shipping-progress-icon-size: 20px !default;
$shipping-progress-icon-color: $text-dark !default;
$shipping-progress-bar-border-radius: $border-radius-base !default;
.summary-sidebar-shipping-progress {
border: 1px solid $border-color;
border-radius: $border-radius-base;
padding: 20px;
.fc {
color: $shipping-progress-icon-color;
font-size: $shipping-progress-icon-size;
line-height: 1;
position: absolute;
left: 0;
top: calc(50% - ($shipping-progress-icon-size / 2));
}
}
.shipping-progress {
margin-bottom: $spacer;
position: relative;
padding-left: $shipping-progress-icon-size * 1.5;
width: 100%;
p {
margin: 0;
}
strong {
color: $text-dark;
}
.shipping-bar {
background: $shipping-progress-bar-bg;
height: 5px;
margin-top: 5px;
position: relative;
border-radius: $shipping-progress-bar-border-radius;
span {
background: $shipping-progress-bar;
display: inline-block;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 5px;
border-radius: $shipping-progress-bar-border-radius;
transition: width .2s;
}
}
}
.order-badges {
.fc {
top: 0;
line-height: .8em;
}
p {
position: relative;
padding-left: $shipping-progress-icon-size * 1.5;
&:last-child {
margin: 0;
}
}
}

View File

@@ -0,0 +1,9 @@
@import "@css[shared]/components/catalog/_catalog";
.catalog {
margin-bottom: 20px;
.img-responsive {
margin: 0 auto 8px;
}
}

View File

@@ -0,0 +1,16 @@
$focus-padding: 25px 30px !default;
@import "@css[shared]/components/focus/_focus-content";
.focus-content {
border-radius: $border-radius-base;
}
.focus-header {
border-bottom: 0;
margin-bottom: 0;
.title {
@include focus-header-title;
}
}

View File

@@ -0,0 +1,7 @@
@import "@css[shared]/modules/_shopping-lists";
.shopping-list-products,
.shopping-list-links,
.shopping-list-buttons {
max-width: unset;
}

View File

@@ -0,0 +1,11 @@
.page-reclamations {
.btn-pager {
aspect-ratio: auto;
}
@media screen and (min-width: 992px) {
.btn:not(.btn-sm) {
min-width: auto;
}
}
}

View File

@@ -0,0 +1,23 @@
@import "@css/_returns";
.returns-header {
margin-bottom: 2rem;
}
.page-returns {
.btn-prevstep {
border: 2px solid $brand-primary;
color: $brand-primary;
@include haf {
border-color: $border-color;
}
}
@media screen and (min-width: 992px) {
.btn:not(.btn-sm) {
min-width: 260px;
}
}
}

View File

@@ -0,0 +1,85 @@
.bonus-points-table {
td:first-child,
th:first-child, {
padding-right: 0;
}
.inactive {
td * {
opacity: .5;
}
}
strong {
color: $text-dark;
}
.fc {
font-size: $font-size-smaller;
}
.icons_arrow-up {
color: $state-success;
}
.icons_arrow-down {
color: $state-error;
}
.bonus-points-tooltip {
font-style: normal;
position: relative;
top: 2px;
opacity: 1 !important;
&::before {
@include fonticon;
content: $icons_tooltip;
}
.wpj-tooltip {
opacity: 1;
display: none;
bottom: calc(100% + 2px);
left: 50%;
transform: translateX(-50%);
width: 250px;
line-height: $line-height-sm;
font-size: 12px;
&::after,
&::before {
left: 50%;
}
}
&:hover {
.wpj-tooltip {
display: block;
}
}
}
}
@media screen and (max-width: $sm - 1) {
.user-manager-table {
overflow-x: scroll;
.table {
width: 700px;
}
}
}
// orderStatus fallback
.page-orderstatus {
max-width: 740px;
margin: 0 auto;
.get_order_status {
display: flex;
align-items: center;
gap: $gap-width;
}
}

View File

@@ -0,0 +1,67 @@
$cart-bonuspoints-border: 1px solid $border-color !default;
.cart-bonuspoints-picker {
border: $cart-bonuspoints-border;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
padding: 20px;
gap: $gap-width;
border-radius: $border-radius-base;
p {
margin: 0;
}
> div:first-child {
flex-grow: 1;
}
.submit-group {
display: flex;
gap: $gap-width;
&.active {
justify-content: space-between;
}
}
.form-control {
flex-grow: 1;
max-width: 100px;
text-align: center;
}
.btn {
flex-grow: 1;
max-width: 170px;
}
.delete {
background: transparent;
border: none;
cursor: pointer;
line-height: 1;
padding: 0 20px;
position: relative;
&:after {
@include fonticon;
content: $lightbox_close;
font-size: 12px;
margin-top: -.5em;
position: absolute;
top: 50%;
right: 0;
text-decoration: none;
}
&:hover,
&:active,
&:focus {
text-decoration: underline;
}
}
}

View File

@@ -0,0 +1,125 @@
@import "@css[common]/order/_cart-gift";
$cart-gifts-border: 1px solid $border-color !default;
$cart-gifts-background: $body-bg !default;
$cart-gifts-icon-color: $brand-primary !default;
.cart-gift {
.cart-gifts-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: $spacer;
.title-default {
margin: 0;
}
}
.focus-content {
width: 680px;
}
.cart-gift-item {
padding: 10px 20px;
border-radius: $border-radius-base;
.custom-control-indicator {
margin: 0 20px 0 0;
}
img {
height: 50px;
margin: 0 20px 0 0;
}
p {
margin: 0;
}
.text-wrapper {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
}
.text strong {
font-size: $font-size-larger;
}
select {
width: 180px;
}
}
}
.cart-gift-inner {
display: flex;
align-items: center;
border: $cart-gifts-border;
background: $cart-gifts-background;
border-radius: $border-radius-base;
padding: 20px;
.fc {
color: $cart-gifts-icon-color;
font-size: 30px;
margin-right: 30px;
}
figure {
margin: 0 20px 0 0;
width: 50px;
}
.text-wrapper {
position: relative;
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
}
p {
margin: 0 auto 0 0;
color: $text-dark;
line-height: $line-height-sm;
}
.cart-gift-title {
font-size: $font-size-larger;
.variation {
display: block;
color: $text-muted;
font-size: $font-size-base;
font-weight: $font-weight-base;
}
}
.cart-gift-price {
font-size: $font-size-larger;
color: $text-dark;
}
}
@media screen and (max-width: $sm - 1) {
.cart-gift {
.cart-gift-item {
.text-wrapper {
flex-direction: column;
align-items: flex-start;
gap: 5px;
}
}
}
.cart-gift-inner {
.text-wrapper {
flex-direction: column;
align-items: flex-start;
gap: 5px;
}
}
}

View File

@@ -0,0 +1,60 @@
$order-product-image-overlay: true !default;
.cart-multisets {
background: $white;
display: flex;
flex-wrap: wrap;
margin: -1px -5px 5px;
position: relative;
+ .product {
border-top: 1px solid $border-color;
}
> div {
margin: 5px;
}
.set-item {
background: $body-bg;
border: 1px solid $border-color;
display: flex;
align-items: center;
padding: 5px 8px;
width: calc(100% / 3 - 10px);
border-radius: $border-radius-base;
@media screen and (max-width: 767px) {
width: calc(50% - 10px);
}
@media screen and (max-width: 499px) {
width: calc(100% - 10px);
}
}
.set-item-title span {
display: block;
font-size: $font-size-smaller;
color: $text-muted;
margin-top: 3px;
}
.set-item-image {
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: $border-radius-base;
position: relative;
margin-right: 15px;
width: 60px;
@if ($order-product-image-overlay) {
@include image-overlay(7px);
}
img {
@include img-responsive;
}
}
}

View File

@@ -0,0 +1,27 @@
$cart-charge-item-border: 1px solid $border-color !default;
$cart-charge-item-background: transparent !default;
$cart-charge-items-gap: calc($gap-width / 2);
@import "@css[shared]/page/order/_cart-product-charges";
.cart-product-charges {
display: flex;
flex-direction: column;
gap: $cart-charge-items-gap;
padding-bottom: 10px;
.charge-item {
border: $cart-charge-item-border;
background: $cart-charge-item-background;
border-radius: $border-radius-base;
+ .charge-item {
border-top: $cart-charge-item-border;
}
}
@media screen and (max-width: $sm - 1) {
padding-left: 0;
}
}

View File

@@ -0,0 +1,29 @@
$cart-set-item-border: 1px solid $border-color !default;
$cart-set-item-background: transparent !default;
@import "@css[shared]/page/order/_cart-product-sets";
.cart-product-sets {
padding-bottom: 10px;
.set-item {
border: $cart-set-item-border;
background: $cart-set-item-background;
border-radius: $border-radius-base;
&:last-child {
border: $cart-set-item-border;
}
}
.set-price,
.set-label {
font-weight: $font-weight-bold;
font-size: $font-size-larger;
}
.set-label {
margin-right: 10px;
font-size: $font-size-base;
}
}

View File

@@ -0,0 +1,27 @@
$ordering-logo-width: 70px !default;
.c-header.header-ordering {
margin-bottom: 35px;
> .container {
> div {
width: calc(50% - $ordering-logo-width);
}
}
.c-header-icons {
justify-content: flex-end;
}
@media screen and (max-width: $md - 1) {
> .container {
> div {
width: auto;
&:first-child {
display: none;
}
}
}
}
}

View File

@@ -0,0 +1,53 @@
.cart-btns {
text-align: center;
.btn-prevstep {
display: inline-block;
margin-bottom: 15px;
color: $text-dark;
}
.cart-nextstep-wrapper {
margin-bottom: 10px;
}
.btn-nextstep {
@include btn-ctr;
padding-left: 5px;
padding-right: 5px;
+ p {
margin-top: 10px;
color: $text-muted;
}
}
.btn-nextstep.last {
position: relative;
&::before {
@include fonticon;
content: $icons_check;
font-size: $font-size-base;
position: absolute;
left: 25px;
top: 50%;
transform: translateY(-50%);
}
&.disabled,
&:disabled {
pointer-events: none;
@if mixin-exists(btn-disabled) {
@include btn-disabled;
} @else {
background-color: #a0a0a0;
border-color: #a0a0a0;
color: $white;
}
}
}
}

View File

@@ -0,0 +1,23 @@
@import "@css[shared]/page/order/_order-charges";
.cart-charge {
border-bottom: 1px solid $border-color;
padding-bottom: 10px;
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
.title {
font-size: $font-size-base;
font-weight: $font-weight-base;
}
.icons_tooltip {
color: $brand-primary;
font-size: $font-size-larger;
top: 2px;
margin-left: 4px;
}
}

View File

@@ -0,0 +1,57 @@
$pricebox-background: $body-bg !default;
$pricebox-padding: 15px 0 !default;
.price-box {
background: $pricebox-background;
line-height: $line-height-sm;
border-radius: $border-radius-base;
padding: $pricebox-padding;
.price-box-row-cartsaving {
color: $discount-color;
}
.price-box-row {
display: flex;
min-height: 2rem;
justify-content: space-between;
align-items: baseline;
}
p {
margin: .25rem;
+ p:last-child {
font-size: $font-size-larger;
font-weight: $font-weight-bold;
padding-left: 5px;
white-space: nowrap;
}
}
.total-price {
color: $text-dark;
p:first-child {
font-size: $font-size-larger;
font-weight: $font-weight-bold;
}
p:last-child {
font-weight: $font-weight-bold;
font-size: $font-size-h3;
line-height: 1;
}
}
.btn-discount-remove {
@include btn-reset;
cursor: pointer;
transition: color $transition-speed;
@include haf {
color: $state-error;
}
}
}

View File

@@ -0,0 +1,141 @@
$active-step-background-color: $brand-primary !default;
.order-process-container {
margin: 0 auto 30px;
max-width: $cart-form-width;
}
.order-process {
display: flex;
justify-content: flex-start;
counter-reset: counter;
}
.order-process-step {
display: flex;
align-items: center;
position: relative;
&::before {
background: $body-bg;
border: 1px solid $border-color;
border-radius: 50%;
color: $text-dark;
content: counter(counter);
counter-increment: counter;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: $font-size-larger;
font-weight: $font-weight-bold;
margin-right: 13px;
position: relative;
width: 38px;
height: 38px;
z-index: 1;
}
&::after {
border-top: 1px solid $border-color;
content: "";
display: inline-block;
width: 50px;
margin: 0 15px;
}
&:last-child {
@media screen and (min-width: $md) {
@include delete-after;
}
&::before {
@include fonticon;
content: $icons_check;
display: flex;
align-items: center;
font-size: 1rem;
}
}
&.active {
font-size: $font-size-larger;
font-weight: $font-weight-bold;
&::before {
border-color: $active-step-background-color;
background: $active-step-background-color;
color: $white;
}
&.order-process-laststep::before {
color: $white;
background: $state-success;
border-color: $state-success;
}
}
&.visited {
@include underline-never;
&::before {
transition: all $transition-speed;
}
@include haf {
&::before {
border-color: $active-step-background-color;
background: $active-step-background-color;
color: $white;
}
}
}
}
@media screen and (max-width: $md - 1) {
.order-process {
margin: 0 auto;
max-width: 550px;
justify-content: center;
}
.order-process-step {
flex-direction: column;
padding: 0 5px;
text-align: center;
width: 25%;
font-size: $font-size-smaller;
&::before {
margin: 0 auto 8px;
}
&::after {
position: absolute;
top: 19px;
width: 100%;
margin: 0;
}
&:first-child::after {
right: -5px;
width: 50%;
}
&:last-child::after {
left: -5px;
width: 50%;
}
&.active {
font-size: $font-size-smaller;
}
}
}
@media screen and (max-width: 599px) {
.order-process-step {
flex-grow: 1;
width: auto;
}
}

View File

@@ -0,0 +1,95 @@
@import "@css[shared]/page/order/_order-products-summary";
.order-products-summary {
.price-summary {
display: flex;
flex-direction: column;
}
.price-total-summary {
order: 1;
.summary-gift-price,
div strong {
font-size: $font-size-larger;
}
}
.cart-product-charges,
.cart-product-sets {
padding-left: 0;
}
.cart-product-charges {
.charge-item {
padding: 12px;
> span {
display: flex;
justify-content: space-between;
width: 100%;
}
.charge-price {
font-weight: $font-weight-bold;
margin: 0;
}
}
}
.cart-product-sets {
.set-item {
justify-content: space-between;
padding: 12px;
}
.set-label,
.set-price {
font-size: $font-size-base;
}
.set-label {
display: flex;
flex-direction: column;
a {
@include underline-hover;
font-weight: $font-weight-base;
white-space: normal;
}
}
}
@media screen and (max-width: $xs - 1) {
.product {
flex-wrap: wrap;
align-items: flex-start;
justify-content: flex-start;
min-height: 90px;
padding-left: 80px;
position: relative;
}
.image {
position: absolute;
top: 5px;
left: 0;
width: 80px;
}
.title {
padding-right: 0;
width: 100% !important;
}
.variation {
margin-bottom: 3px;
}
.price-summary {
padding-left: 10px;
text-align: left;
}
}
}

View File

@@ -0,0 +1,153 @@
$order-product-vertical-padding: 10px;
$order-product-image-width: 74px !default;
$order-product-image-overlay: true !default;
@import "@css[shared]/page/order/_order-products";
.order-products {
padding-bottom: 20px;
.product:first-child {
border-top: 0;
}
.image {
a {
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: $border-radius-base;
position: relative;
@if ($order-product-image-overlay) {
@include image-overlay(7px);
}
.c-product-discountlabel {
position: absolute;
top: 5px;
left: 5px;
}
}
}
.title {
margin-left: 20px;
a {
@include underline-hover;
}
}
.variation {
font-size: $font-size-smaller;
margin-top: 3px;
}
.availability {
width: auto;
}
.buy_count {
width: 40px;
button {
color: $text-dark;
}
}
.price-total {
text-align: right;
width: 120px;
.flag {
display: none;
}
}
.delete-product {
font-size: 18px;
}
}
@media screen and (min-width: $lg) and (max-width: $ordering-products-breakpoint),
screen and (max-width: $md) {
.order-products:not(.order-products-summary) {
.product {
flex-wrap: wrap;
align-items: flex-start;
justify-content: flex-start;
position: relative;
padding-left: 84px;
}
.image {
position: absolute;
top: 5px;
left: 0;
}
.title {
margin-left: 10px;
margin-bottom: 10px;
width: 100%;
}
.availability {
display: none;
}
.availability-resp {
display: block;
font-size: $font-size-smaller;
}
.pieces {
position: static;
margin-left: 10px;
}
.price-total {
position: absolute;
right: 0;
bottom: 20px;
}
.delete-product {
align-self: flex-end;
margin-bottom: 13px;
margin-left: 0;
order: 1;
}
}
}
@media screen and (min-width: $md) and (max-width: $lg - 1) {
.order-products {
.availability {
display: block;
}
.availability-resp {
display: none;
}
}
}
@media screen and (max-width: $xs - 1) {
.order-products:not(.order-products-summary) {
.title,
.pieces {
margin-left: 7px;
}
.pieces {
width: 80px;
margin-right: 15px;
.form-control {
width: 50px;
}
}
}
}

View File

@@ -0,0 +1,10 @@
$ordersuccess-width: unset !default;
@import "@css[shared]/page/order/_order-success";
.main-ordering-success {
.order-process-container {
display: none;
}
}

View File

@@ -0,0 +1,155 @@
$check-order-msg-background: $brand-ctr !default;
$check-order-msg-color: $white !default;
.summary-sidebar {
width: 100%;
margin-bottom: 20px;
.check-order-msg {
background: $check-order-msg-background;
border-radius: $border-radius-base;
color: $check-order-msg-color;
font-weight: $font-weight-bold;
padding: 10px 15px;
margin: 0;
}
.order-products {
padding-bottom: 0;
}
@media screen and (min-width: $lg) {
max-width: calc(#{$summary-siderbar-width} + #{$summary-siderbar-padding-left});
padding-left: $summary-siderbar-padding-left;
// todo simplebar nepoužívat, používat nativní scroll
[data-opener="[data-summary-sidebar-products]"] {
pointer-events: none;
}
[data-summary-sidebar-products] {
display: block !important;
}
[data-simplebar="init"] {
max-height: 700px;
margin-bottom: 30px;
.simplebar-track.simplebar-vertical {
right: -15px;
}
}
.sticky {
position: sticky;
top: 10px;
}
}
}
.summary-sidebar-delivery-wrapper {
padding-bottom: 1rem;
}
.summary-sidebar-delivery {
border-bottom: 1px solid $border-color;
display: flex;
justify-content: space-between;
align-items: center;
margin: 0;
padding: 15px 0;
p {
margin: 0;
}
.title {
color: $text-dark;
span {
font-size: $font-size-smaller;
color: $text-muted;
}
}
.price {
font-size: $font-size-larger;
font-weight: $font-weight-bold;
}
p:last-child {
text-align: right;
max-width: 70%;
}
}
/* delivery/user step modification */
.order-content {
display: flex;
justify-content: space-between;
position: relative;
.deliveries {
flex-wrap: wrap;
> div {
width: 100%;
}
.cart-box {
max-width: none;
}
}
}
@media screen and (max-width: $lg - 1) {
.summary-sidebar {
max-width: none;
padding-left: 0;
[data-opener="[data-summary-sidebar-products]"] {
position: relative;
cursor: pointer;
padding-right: 40px;
display: flex;
align-items: center;
&::after {
@include fonticon;
content: $icons_caret-down;
position: absolute;
right: 0;
font-size: $font-size-base;
line-height: 1;
}
&.active::after {
transform: rotate(-180deg);
}
}
.order-products {
.title {
width: auto;
}
}
}
/* delivery/user step modification */
.order-content {
flex-wrap: wrap;
> div {
width: 100%;
}
.deliveries {
margin: 0;
> div {
padding: 0;
}
}
}
}

View File

@@ -0,0 +1,30 @@
$cart-voucher-hidden: true;
@import "@css[shared]/page/order/_order-voucher";
.cart-voucher {
margin-bottom: 15px;
a {
@include btn;
@include btn-outline;
width: 100%;
&::before {
content: '%';
display: inline-flex;
align-items: center;
justify-content: center;
width: 23px;
height: 23px;
background: $black;
color: $white;
border-radius: 50%;
}
}
.cart-vouchers-active {
display: none;
}
}

View File

@@ -0,0 +1,102 @@
// cart JsShop disabled
#js-shop-cart-info {
pointer-events: none;
}
.cart-form {
margin: auto;
max-width: $cart-form-width;
}
.cart-delivery-place {
background-color: $body-bg-alt;
padding: 15px 30px;
margin-bottom: 20px;
p {
margin-bottom: 0;
}
}
h1 {
display: flex;
align-items: center;
margin-bottom: 22px;
span {
display: inline-block;
}
.count {
color: $body-color;
font-size: 16px;
font-weight: 400;
position: relative;
right: -4px;
top: -5px;
}
}
.text-center h1,
h1.text-center {
justify-content: center;
}
.order-content {
align-items: flex-start;
//margin-bottom: 50px;
}
.order-container .shipping-progress-wrapper {
@media screen and (min-width: $xs) {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
> div {
width: calc(50% - 14px);
}
}
}
@media screen and (max-width: $lg - 1) {
.main-ordering,
.order-content {
margin-bottom: 0;
}
}
.ordering-gdpr .form-control-feedback {
display: none !important;
}
#noteUser {
height: 150px;
line-height: 1.25;
resize: none;
}
.main-cart > hr {
margin: 40px 0;
}
.order-content > div:first-child {
flex-grow: 1;
@media screen and (min-width: $lg) {
max-width: calc(100% - $summary-siderbar-width - $summary-siderbar-padding-left);
}
}
// OrderViewEdit fallback fix
.account-right-side {
.page-orderview {
max-width: none;
}
}
@media screen and (max-width: $xs - 1) {
.cart-btns .btn.btn-nextstep {
letter-spacing: normal;
}
}

View File

@@ -0,0 +1,25 @@
.cart-cart {
@media screen and (min-width: $lg) {
.order-content {
display: block;
float: left;
width: 100%;
}
.summary-sidebar {
float: right;
}
.order-content > div:first-child {
float: left;
width: calc(100% - #{$summary-siderbar-width} - #{$summary-siderbar-padding-left});
max-width: 830px;
}
}
@media screen and (max-width: $lg - 1) {
.btn-prevstep {
display: none;
}
}
}

View File

@@ -0,0 +1,198 @@
$delivery-label-height: 82px; //$line-height-sm * $font-size-base * 2 + 2rem !default;
$delivery_collapsible: true;
@import "@css[shared]/page/order/_step-delivery";
.cart-box {
margin-bottom: 25px;
}
.cart-box-row {
padding: 0 20px;
.delivery-content {
padding-left: calc(2rem + 25px);
}
.title,
.name {
font-size: 16px;
font-weight: $font-weight-bold;
}
.subtitle {
font-size: 14px;
font-weight: 400;
}
}
.delivery-item,
.payment-item {
.custom-control-indicator {
width: 26px;
height: 26px;
}
&.selected {
border-color: $black;
.custom-control-indicator {
display: flex;
align-items: center;
justify-content: center;
border-color: $custom-control-border-checked !important;
background: $custom-control-background-checked !important;
&::before {
content: '';
width: 16px;
height: 16px;
background-image: $custom-checkbox-icon;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
}
}
}
.deliveries-collapsible {
.delivery-reset-label {
padding: 15px 20px;
}
.payments-box {
.unselected-notify {
font-size: $font-size-smaller;
}
}
&.delivery-selected {
.delivery-inperson-city {
display: none;
}
}
}
.payment-item-gopay {
cursor: pointer;
display: flex;
flex-wrap: wrap;
flex-direction: column;
> div {
width: 100%;
&.disabled {
display: block;
}
}
}
.thepay-method {
min-height: $delivery-label-height;
order: 1;
&.disabled {
display: flex !important;
}
> div:first-child {
display: flex;
justify-content: space-between;
align-items: center;
flex: 1;
margin-right: 30px;
}
.name {
margin: 0 10px 0 0;
}
img {
max-width: 60px;
max-height: 30px;
height: auto;
width: auto;
margin: 0 5px;
}
.thepay-more {
@include underline-never;
display: flex;
align-items: center;
span {
text-decoration: underline;
}
&:hover span {
text-decoration: none;
}
}
}
.payment-item-gp {
.img {
text-align: center;
img {
display: inline-block;
}
}
}
.delivery-item-inperson {
> div:first-child {
justify-content: flex-start;
}
img {
margin: 0;
}
@media screen and (max-width: 449px) {
flex-wrap: wrap;
padding-top: 10px;
> div:first-child {
flex: 100%;
}
> div:last-child {
margin-left: 60px;
}
.name {
order: 0 !important;
}
.img {
margin: 0;
align-self: center;
}
}
}
@media screen and (max-width: $md - 1) {
.thepay-method img:nth-child(4) {
display: none;
}
}
@media screen and (max-width: $sm - 1) {
.thepay-method img:nth-child(3) {
display: none;
}
}
@media screen and (max-width: $xs - 1) {
.thepay-method img {
display: none;
}
}

View File

@@ -0,0 +1,40 @@
@import "@css[shared]/page/user/_user.scss";
@import "@css/components/_oauth-box.scss";
.page-user {
.col-sm-6 {
width: 100%;
}
.form-user {
h3 {
font-size: $font-size-h4;
}
}
}
.page-user-edit {
h1 {
text-align: unset;
}
.form-user {
max-width: 490px;
}
}
.page-user-new {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
h1 {
text-align: unset;
}
@media screen and (min-width: $lg) {
> div {
width: 45%;
}
}
}

View File

@@ -0,0 +1,5 @@
{extends_parent}
{block "js-entry" append}
{include "components/block.smartForm.tpl"}
{/block}

View File

@@ -0,0 +1,11 @@
<div class="page-user page-user-edit">
<h1>{$view->getTitle()}</h1>
{ifmodule USER_OAUTH}
{if $dbcfg.oauth.facebook.client_id or $dbcfg.oauth.google.client_id}
{include "user/user.oauth.tpl"}
{/if}
{/ifmodule}
{include "user/user.form.v2.tpl"}
</div>

View File

@@ -0,0 +1,66 @@
{extends_parent}
{block "user-form-prepend"}
{if $body.newUser}<h4>{t}Registrace pomocí e-mailu{/t}</h4>{/if}
{/block}
{block "gender"}
<div class="col-xxs-12 col-sm-6">
<div class="form-group form-group-legend form-group-gender">
<label for="gender">{t}Pohlaví{/t}</label>
<select name="gender" class="custom-select form-control" id="gender">
<option selected disabled hidden>
{t}Neuvedeno{/t}
</option>
<option value="M" {if $body.input.gender.value == 'M'}selected{/if}>
{t}Muž{/t}
</option>
<option value="F" {if $body.input.gender.value == 'F'}selected{/if}>
{t}Žena{/t}
</option>
<option value="">
{t}Nechci uvést{/t}
</option>
</select>
<span class="legend">{t}Nepovinné{/t}</span>
</div>
</div>
{/block}
{block "different-address-opener"}
{ifmodule USER_ADDRESSES}
{if !$body.newUser}
{get_addresses assign="user_addresses"}
{if $user_addresses|count > 0 or $dbcfg.edit_user_addresses}
<div class="form-group">
<label for="different-address" class="custom-control custom-checkbox">
<input type="checkbox" name="different-address" id="different-address" class="custom-control-input"
data-opener="[data-different-address]"{if $user_addresses|count > 0} checked{/if}>
<span class="custom-control-indicator"></span>
{t}Dodání na jinou adresu nebo do zaměstnání{/t}
</label>
</div>
{/if}
{else}
{$smarty.block.parent}
{/if}
{elsemodule}
{$smarty.block.parent}
{/ifmodule}
{/block}
{block "different-address-content"}
{ifmodule USER_ADDRESSES}
{if !$body.newUser}
<div class="opener-content" style="display: {if $user_addresses|count > 0}block{else}none{/if};" data-different-address>
{render_component name="Account:UserAddressesList" assign="addresses"}
{$addresses nofilter}
</div>
{else}
{$smarty.block.parent}
{/if}
{elsemodule}
{$smarty.block.parent}
{/ifmodule}
{/block}

View File

@@ -0,0 +1,15 @@
<div class="page-user page-user-new">
<div>
<h1>{$view->getTitle()}</h1>
{insert_page type="REGISTRATION" exists='exists'}
{include "user/user.form.v2.tpl"}
</div>
<div>
{ifmodule USER_OAUTH}
{if $dbcfg.oauth.facebook.client_id or $dbcfg.oauth.google.client_id}
{include "user/user.oauth.tpl"}
{/if}
{/ifmodule}
</div>
</div>

View File

@@ -0,0 +1,94 @@
{ifmodule USER_OAUTH}
<div class="oauth-box">
{if $ctrl.logged}
{get_logged_user_provider_ids assign='userProviderIDs'}
{foreach $userProviderIDs as $providerIDRow}
{if $providerIDRow.provider == "facebook"}
{$fbRemove = $providerIDRow}
{elseif $providerIDRow.provider == "google"}
{$googleRemove = $providerIDRow}
{elseif $providerIDRow.provider == 'seznam'}
{$seznamRemove = $providerIDRow}
{elseif $providerIDRow.provider == 'amazon'}
{$amazonRemove = $providerIDRow}
{elseif $providerIDRow.provider == 'apple'}
{$appleRemove = $providerIDRow}
{/if}
{/foreach}
{/if}
{block "oauth-text"}
{if $body.newUser}
<h4>{t}Rychlá registrace pomocí sociálních sítí{/t}</h4>
{else}
<h4>{t}Propojení se sociálními sítěmi{/t}</h4>
{/if}
{/block}
<div class="oauth-buttons">
{if $dbcfg.oauth.facebook.client_id}
{if $fbRemove}
<a href="/login-unbind/{$fbRemove.id}" class="fb" title="{$fbRemove.email}"><span class="icon"></span>
<div class="text"><strong>{t}Spárováno{/t}</strong><br><span>{t}Odebrat{/t}</span></div>
</a>
{else}
<a href="/login-bind/facebook" class="fb"><span class="icon"></span>
<div class="text"><span>{if $body.newUser}Facebook{else}{t}Spárovat{/t}{/if}</span></div>
</a>
{/if}
{/if}
{if $dbcfg.oauth.google.client_id}
{if $googleRemove}
<a href="/login-unbind/{$googleRemove.id}" class="gp" title="{$googleRemove.email}"><span class="icon"></span>
<div class="text"><strong>{t}Spárováno{/t}</strong><br><span>{t}Odebrat{/t}</span></div>
</a>
{else}
<a href="/login-bind/google" class="gp"><span class="icon"></span>
<div class="text"><span>{if $body.newUser}Google{else}{t}Spárovat{/t}{/if}</span></div>
</a>
{/if}
{/if}
{ifmodule USER_OAUTH__SEZNAM_LOGIN}
{if $dbcfg.oauth.seznam.client_id}
{if $seznamRemove}
<a href="/login-unbind/{$seznamRemove.id}" class="sz" title="{$seznamRemove.email}"><span class="icon"></span>
<div class="text"><strong>{t}Spárováno{/t}</strong><br><span>{t}Odebrat{/t}</span></div>
</a>
{else}
<a href="/login-bind/seznam" class="sz"><span class="icon"></span>
<div class="text"><span>{if $body.newUser}Seznam{else}{t}Spárovat{/t}{/if}</span></div>
</a>
{/if}
{/if}
{/ifmodule}
{ifmodule USER_OAUTH__AMAZON_LOGIN}
{if $dbcfg.oauth.amazon.client_id}
{if $amazonRemove}
<a href="/login-unbind/{$amazonRemove.id}" class="amazon" title="{$amazonRemove.email}"><span class="icon"></span>
<div class="text"><strong>{t}Spárováno{/t}</strong><br><span>{t}Odebrat{/t}</span></div>
</a>
{else}
<a href="/login-bind/amazon" class="amazon"><span class="icon"></span>
<div class="text"><span>{if $body.newUser}Amazon{else}{t}Spárovat{/t}{/if}</span></div>
</a>
{/if}
{/if}
{/ifmodule}
{ifmodule USER_OAUTH__APPLE_LOGIN}
{if $dbcfg.oauth.apple.client_id}
{if $appleRemove}
<a href="/login-unbind/{$appleRemove.id}" class="apple" title="{$appleRemove.email}"><span class="icon"></span>
<div class="text"><strong>{t}Spárováno{/t}</strong><br><span>{t}Odebrat{/t}</span></div>
</a>
{else}
<a href="/login-bind/apple" class="apple"><span class="icon"></span>
<div class="text"><span>{if $body.newUser}Apple{else}{t}Spárovat{/t}{/if}</span></div>
</a>
{/if}
{/if}
{/ifmodule}
</div>
</div>
{/ifmodule}