custom/plugins/XioniXconfig/src/Resources/views/storefront/page/product-detail/buy-widget.html.twig line 1

Open in your IDE?
  1. {% sw_extends '@Storefront/storefront/page/product-detail/buy-widget.html.twig' %}
  2. {% block page_product_detail_buy_form %}
  3. {% endblock %}
  4. {% block page_product_detail_price %}
  5.     {% set has_config = page.extensions.is_xconfig.has_configuration %}
  6.     {% sw_include '@XioniXconfig/storefront/page/product-detail/x_breadcrumb.html.twig' with { context: context, category: page.product.seoCategory } only %}
  7.     <div class="x-product-detail-tabs">
  8.         <div class="x-product-detail-tab tab-price">
  9.             <button class="tab-button tab-active" type="button" value="price">Preis</button>
  10.         </div>
  11.         <div class="x-product-detail-tab tab-info">
  12.             <button class="tab-button" type="button" value="info">Kontakt</button>
  13.         </div>
  14.         <div class="x-product-detail-tab tab-manufacturer">
  15.             <button class="tab-button" type="button" value="manufacturer">Hersteller</button>
  16.         </div>
  17.     </div>
  18.     <div class="product-detail-tab-content" id="tab-price">
  19.         <div class="product-detail-price-container">
  20.             {% if page.product.productNumber %}
  21.                 <div class="product-detail-ordernumber-container">
  22.                     {% block page_product_detail_ordernumber_label %}
  23.                         <span class="product-detail-ordernumber-label">
  24.                             {{ "detail.productNumberLabel"|trans|sw_sanitize }}
  25.                         </span>
  26.                     {% endblock %}
  27.                     {% block page_product_detail_ordernumber %}
  28.                         <meta itemprop="productID"
  29.                                 content="{{ page.product.id }}"/>
  30.                         <span class="product-detail-ordernumber"
  31.                                 itemprop="sku">
  32.                             {{ page.product.productNumber }}
  33.                         </span>
  34.                     {% endblock %}
  35.                 </div>
  36.             {% endif %}
  37.             <h1 class="x-product-atricle-name">{{ page.product.translated.name }}</h1>
  38.             <div class="netto-container">
  39.                 <div class="price-detail-netto-headline">Netto</div>
  40.                 {% sw_include '@Storefront/storefront/page/product-detail/buy-widget-price.html.twig' %}
  41.             </div>
  42.             <div class="brutto-container">
  43.                 <div class="price-detail-brutto-headline">Brutto</div>
  44.                 {% set brutto_price = page.product.calculatedPrice.unitPrice*1.19 %}
  45.                 <div class="product-detail-price-brutto">
  46.                     <span class="brutto-price-number">{{ brutto_price|currency }}</span>
  47.                     {% if page.product.calculatedPrice.unitPrice >= 50.00 %}
  48.                         inkl. MwSt. inkl. Versandkosten
  49.                     {% else %}
  50.                         inkl. MwSt. zzgl. Versandkosten
  51.                     {% endif %}
  52.                 </div>
  53.             </div>
  54.             <div class="product-detail-tax-container">
  55.                 {% if context.taxState == "gross" %}
  56.                     {% set taxText = "general.grossTaxInformation"|trans|sw_sanitize %}
  57.                 {% else %}
  58.                     {% set taxText = "general.netTaxInformation"|trans|sw_sanitize %}
  59.                 {% endif %}
  60.                 <p class="product-detail-tax">
  61.                     {% block page_product_detail_tax_link %}
  62.                         <a class="product-detail-tax-link"
  63.                                 href="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}"
  64.                                 title="{{ taxText }}"
  65.                                 data-toggle="modal"
  66.                                 data-url="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}">
  67.                         {% if page.product.calculatedPrice.unitPrice >= 50.00 %}
  68.                             inkl. MwSt. inkl. Versandkosten
  69.                         {% else %}
  70.                             {{ taxText }}
  71.                         {% endif %}
  72.                         </a>
  73.                     {% endblock %}
  74.                 </p>
  75.             </div>
  76.             <div class="product-detail-delivery-information">
  77.                 {% sw_include '@Storefront/storefront/component/delivery-information.html.twig' %}
  78.             </div>
  79.             {% if page.product.productNumber == "parking3000" %}
  80.                 <p class="product-detail-start-add-hint"><span style="font-weight: bold">Hinweis:</span><br> Für die elektrischen Schranken empfehlen wir eine persönliche Beratung durch unsere Experten!
  81.                 Sie sind Ihnen ebenso behilflich bei der Auswahl von Zubehör. Kontaktieren Sie uns direkt unter +49 (0) 2373 17809-0 oder per <a target="_blank" href="https://poller24.de/Shop-Service/Kontakt/">Kontaktformular</a>.
  82.                 Gern können Sie auch erste Fragen im Konfigurator beantworten und uns Ihre Anfrage senden.</p>
  83.                 <span id="xconfig_start_description" style="font-weight: bold"></span>
  84.             {% endif %}
  85.             <div class="xconfig_start_block">
  86.                 <div id="x_info_modal" class="x-modal-dialog">
  87.                     <div>
  88.                       <a href="#close" title="Close" class="x-dialog-close">x</a>
  89.                       <h2>Informationen zur Konfiguration</h2>
  90.                       <p>Der Ihnen gezeigte Preis basiert auf einer voreingestellten Konfiguration.</p>
  91.                       <p>Das Produkt können Sie in dieser Variante mit einem Klick auf das Einkaufswagensymbol {% sw_icon "shoppingcart-small" style {"pack" : "xicons"} %}, rechts neben dem Konfigurationstext, in den Warenkorb legen.</p>
  92.                       <p>Natürlich können Sie auch das Produkt mit dem Konfigurator nach ihrem Belieben anpassen.</p>
  93.                     </div>
  94.                 </div>
  95.                 <p class="product-detail-start-add-hint"><a href="#" id="x_info_click">{% sw_icon "info" %}</a> Preis auf Basis folgender Konfiguration:</p>
  96.                 <span id="xconfig_start_description" style="font-weight: bold"></span>
  97.                 <form
  98.                         id="xProductForm"
  99.                         action="{% block page_product_detail_buy_form_action %}{{ path('frontend.checkout.line-item.add') }}{% endblock %}"
  100.                         method="post"
  101.                         class="buy-widget"
  102.                         data-add-to-cart="true">
  103.                     {% block page_product_detail_buy_form_inner_csrf %}
  104.                         {{ sw_csrf('frontend.checkout.line-item.add') }}
  105.                     {% endblock %}
  106.                     <input type="hidden"
  107.                             name="redirectTo"
  108.                             value="frontend.detail.page">
  109.                     <input type="hidden"
  110.                             name="redirectParameters"
  111.                             data-redirect-parameters="true"
  112.                             value='{"productId": "{{ page.product.id }}"}'>
  113.                     <input type="hidden"
  114.                             name="lineItems[{{ page.product.id }}][id]"
  115.                             value="{{ page.product.id }}">
  116.                     <input type="hidden"
  117.                             name="lineItems[{{ page.product.id }}][type]"
  118.                             value="product">
  119.                     <input type="hidden"
  120.                             name="lineItems[{{ page.product.id }}][referencedId]"
  121.                             value="{{ page.product.id }}">
  122.                     <input type="hidden"
  123.                             name="lineItems[{{ page.product.id }}][stackable]"
  124.                             value="1">
  125.                     <input type="hidden"
  126.                             name="lineItems[{{ page.product.id }}][removable]"
  127.                             value="1">
  128.                     <input type="hidden"
  129.                             name="lineItems[{{ page.product.id }}][xProductNumber]"
  130.                             value="{{ page.product.productNumber }}">
  131.                     <input type="hidden"
  132.                             name="lineItems[{{ page.product.id }}][quantity]"
  133.                             value="1">
  134.                     <input type="hidden"
  135.                             name="lineItems[{{ page.product.id }}][xconfig]"
  136.                             value="1">
  137.                     <input type="hidden"
  138.                             id="xconfigStartDesc"
  139.                             name="lineItems[{{ page.product.id }}][xconfigDesc]"
  140.                             value="">
  141.                     <input type="hidden"
  142.                             id="xconfigStartMedia"
  143.                             name="lineItems[{{ page.product.id }}][xconfigMedia]"
  144.                             value="">
  145.                     <input type="hidden"
  146.                             id="xStartGroupIds"
  147.                             name="lineItems[{{ page.product.id }}][xGroupIds]"
  148.                             value="">
  149.                     <input type="hidden"
  150.                             id="xStartGroupValues"
  151.                             name="lineItems[{{ page.product.id }}][xGroupValues]"
  152.                             value="">
  153.                     <button class="btn header-actions-btn" id="startCartBtn"
  154.                             title="{{ "detail.addProduct"|trans|striptags }}"
  155.                             aria-label="{{ "detail.addProduct"|trans|striptags }}">
  156.                         {% sw_icon "shoppingcart" style {"pack" : "xicons"} %}
  157.                     </button>
  158.                 </form>
  159.             </div>
  160.         </div>
  161.         {% if has_config %}
  162.             <div id="xconfig">
  163.             <div id="xconfig_body">
  164.             </div>
  165.             <div id="xconfig_footer">
  166.             </div>
  167.         </div>
  168.         {% endif %}
  169.         <div class="xconfig_end_block">
  170.             {% if has_config %}
  171.                 <div class="x-chosen-article-box">
  172.                 <div class="table-detail-headline">Ausgewählte Produktvariante</div>
  173.                 <div class="x-chosen-article">
  174.                 Ausführung:
  175.                 <span class="xconfig_description"></span>
  176.                 </div>
  177.             </div>
  178.                 <!--             <div class="xprice_block">
  179.                                 <div class="x-chosen-article-box">
  180.                                     <div class="table-detail-headline">Übersicht</div>
  181.                                     <div class="x-chosen-article">
  182.                                     Ausführung:
  183.                                     <span class="xconfig_description"></span>
  184.                                     </div>
  185.                                 </div>
  186.                             </div> -->
  187.             {% endif %}
  188.             <div class="col-14 x-buy-field" {% if not has_config %} style="position:inherit!important" {% endif %}>
  189.                 <div class="col-4 x-select" style="margin-right:0px!important">
  190.                     <select class="custom-select">
  191.                     {% for quantity in range(page.product.minPurchase, page.product.calculatedMaxPurchase, page.product.purchaseSteps) %}
  192.                         <option value="{{ quantity }}">
  193.                             {{ quantity }}
  194.                             {% if quantity == 1 %}
  195.                                 {% if page.product.translated.packUnit %} {{ page.product.translated.packUnit }}{% endif %}
  196.                             {% else %}
  197.                                 {% if page.product.translated.packUnitPlural %}
  198.                                     {{ page.product.translated.packUnitPlural }}
  199.                                 {% elseif page.product.translated.packUnit %}
  200.                                     {{ page.product.translated.packUnit }}
  201.                                 {% endif %}
  202.                             {% endif %}
  203.                         </option>
  204.                     {% endfor %}
  205.                     </select>
  206.                 </div>
  207.             <div class="col-8 x-buttons">
  208.                     <button id="cart_primary" form="productDetailPageBuyProductForm" class="btn btn-primary btn-block btn-buy"
  209.                             title="{{ "detail.addProduct"|trans|striptags }}"
  210.                             aria-label="{{ "detail.addProduct"|trans|striptags }}">
  211.                         {{ "detail.addProduct"|trans|sw_sanitize }}
  212.                     </button>
  213.                     <a href="mailto:m.wette@pse-technik.de?subject=Anfrage für {{ page.product.translated.name }}&body=Ihr Firmenname: %0D%0A %0D%0A Ihr Vor- und Nachname: %0D%0A %0D%0A Ihre Telefonnummer: %0D%0A %0D%0A Ihre Nachricht: %0D%0A" id="detail-config-request" class="btn btn-primary btn-block btn-buy">
  214.                         Produkt anfragen {% sw_icon "envelope" %}</a>
  215.                 </a>
  216.             </div>
  217.                 <div class="x-calc-table">
  218.                       <div class="x-calc-table-firstrow">
  219.                         <div class="x-calc-table-row1">Artikel</div>
  220.                         <div class="x-calc-table-row2">Menge</div>
  221.                         <div class="x-calc-table-row3">Preis</div>
  222.                         <div class="x-calc-table-row4"></div>
  223.                       </div>
  224.                       <div class="x-calc-table-secondrow lchline">
  225.                         <div class="x-calc-table-row1">{{ page.product.translated.name }}</div>
  226.                         <div id="x-main-article-qty" class="x-calc-table-row2">1</div>
  227.                         <div id="x-main-article-price" class="x-calc-table-row3">{{ page.product.calculatedPrice.unitPrice|currency }}*</div>
  228.                       </div>
  229.                 </div>
  230.                 <div class="xprice-netto-row">
  231.                     <div class="price-detail-netto-headline-table">Gesamtpreis Netto</div>
  232.                     <div class="x-full-price">{{ page.product.calculatedPrice.unitPrice|currency }}*</div>
  233.                 </div>
  234.                 <div class="xprice-brutto-row">
  235.                     <div class="price-detail-brutto-headline-table">Gesamtpreis Brutto</div>
  236.                     <div class="x-full-price-brutto">{{ brutto_price|currency }}</div>
  237.                 </div>
  238.                 <div class="product-detail-tax-container-table">
  239.                     {% if context.taxState == "gross" %}
  240.                         {% set taxText = "general.grossTaxInformation"|trans|sw_sanitize %}
  241.                     {% else %}
  242.                         {% set taxText = "general.netTaxInformation"|trans|sw_sanitize %}
  243.                     {% endif %}
  244.                     <p class="product-detail-tax">
  245.                         <a class="product-detail-tax-link"
  246.                                 href="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}"
  247.                                 title="{{ taxText }}"
  248.                                 data-toggle="modal"
  249.                                 data-url="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}">
  250.                             {{ taxText }}
  251.                         </a>
  252.                     </p>
  253.                 </div>
  254.             </div>
  255.             {% if page.product.active %}
  256.                 <div class="product-detail-form-container">
  257.                 {% sw_include '@Storefront/storefront/page/product-detail/buy-widget-form.html.twig' %}
  258.             </div>
  259.             {% endif %}
  260.         </div>
  261.     </div>
  262.     <div class="product-detail-tab-content" id="tab-info">
  263.         <p class="tab-info-headline">Ihre Ansprechpartner</p>
  264.         {% if page.product.productNumber == "parking" || page.product.productNumber == "industrial" ||
  265.             page.product.productNumber == "koloss" || page.product.productNumber == "solar" || page.product.productNumber == "parking3000" %}
  266.             <div class="tab-info-personcard">
  267.             <div class="tab-info-personcard-image">
  268.                 <img class="personcard-image" alt="Sebastian Toth - Bereich Absperrtechnik/Zutrittskontrolle" src="/media/90/ef/af/1677056857/sebastian_toth.jpg" alt="Herr Toth" title="Herr Toth">
  269.             </div>
  270.             <div class="tab-info-personcard-description">
  271.                 <p class="tab-info-personcard-description-name">Sebastian Toth</p>
  272.                 <p class="tab-info-personcard-description-title">Ansprechpartner Absperrtechnik/Zutrittskontrolle</p>
  273.                 <p class="tab-info-personcard-description-phone"><a title="+49 (0) 2373 17809-10" href="tel:+4923731780910">+49 (0) 2373 17809-10<br></a></p>
  274.                 <p class="tab-info-personcard-description-mail"><a title="E-Mail-Adresse Sebastian Toth" href="mailto:s.toth@pse-technik.de" target="_blank">s.toth@pse-technik.de</a></p>
  275.             </div>
  276.         </div>
  277.         {% else %}
  278.             <div class="tab-info-personcard">
  279.             <div class="tab-info-personcard-image">
  280.                 <img class="personcard-image" alt="Marion Wette - Produktmanagerin" src="/media/5f/67/80/1647334115/frau_wette.jpg" alt="Frau Wette" title="Frau Wette">
  281.             </div>
  282.             <div class="tab-info-personcard-description">
  283.                 <p class="tab-info-personcard-description-name">Marion Wette</p>
  284.                 <p class="tab-info-personcard-description-title">Produktmanagerin</p>
  285.                 <p class="tab-info-personcard-description-phone"><a title="+49 (0) 2373 17809-11" href="tel:+4923731780911">+49 (0) 2373 17809-11<br></a></p>
  286.                 <p class="tab-info-personcard-description-mail"><a title="E-Mail-Adresse Marion Wette" href="mailto:m.wette@pse-technik.de" target="_blank">m.wette@pse-technik.de</a></p>
  287.             </div>
  288.         </div>
  289.             <div class="tab-info-personcard">
  290.             <div class="tab-info-personcard-image">
  291.                 <img class="personcard-image" alt="Christian Preuß - Produktmanager" src="/media/f9/f0/29/1647334352/herr_preuss.jpg" alt="Herr Preuß" title="Herr Preuß">
  292.             </div>
  293.             <div class="tab-info-personcard-description">
  294.                 <p class="tab-info-personcard-description-name">Christian Preuß</p>
  295.                 <p class="tab-info-personcard-description-title">Produktmanager</p>
  296.                 <p class="tab-info-personcard-description-phone"><a title="+49 (0) 2373 17809-0" href="tel:+492373178090">+49 (0) 2373 17809-0
  297.                 </a></p>
  298.                 <p class="tab-info-personcard-description-mail"><a title="E-Mail-Adresse Christian Preuß" href="mailto:c.preuss@pse-technik.de" target="_blank">c.preuss@pse-technik.de</a><a title="+49 (0) 2373 17809-0" href="tel:+492373178090"></a></p>
  299.             </div>
  300.         </div>
  301.         {% endif %}
  302.     </div>
  303.     <div class="product-detail-tab-content" id="tab-manufacturer">
  304.         <img src="{{ page.product.manufacturer.media.url }}" class="manufacturer-image" alt="{{ page.product.manufacturer.name }}">
  305.         {{ page.product.manufacturer.description }}<br><br>
  306.         <p class="manufacturer-website">Webseite: <a titel="{{ page.product.manufacturer.name }}" href="{{ page.product.manufacturer.link }}" target="_blank" alt="{{ page.product.manufacturer.name }}" >{{ page.product.manufacturer.link }}</a></p>
  307.     </div>
  308.     {% if page.product.productNumber == "SchrankeS" || page.product.productNumber == "parking" || page.product.productNumber == "industrial" ||
  309.         page.product.productNumber == "koloss" || page.product.productNumber == "solar" %}
  310.         <script>
  311.         $("#cart_primary").hide();
  312.         $(".x-calc-table").hide();
  313.         $(".xprice-netto-row").hide();
  314.         $(".xprice-brutto-row").hide();
  315.         $(".x-select").hide();
  316.         $(".product-detail-tax-container-table").hide();
  317.         $(".netto-container").html('<meta itemprop="price" content="0"><p class="product-detail-price">Preis auf Anfrage</p><p>Wir erstellen Ihnen gern ein Angebot. Einfach konfigurieren und Produktberatung anfragen! Weitere Details klären wir in einem persönlichen Gespräch.</p>');
  318.         $(".netto-container").css({"float": "inherit", "width": "100%"});
  319.         //$(".netto-container").hide();
  320.         $(".brutto-container").hide();
  321.         $(".product-detail-delivery-information").hide();
  322.         $(".product-detail-tax-container").hide();
  323.         $(".xconfig_start_block").hide();
  324.         $(".x-chosen-article-box").hide();
  325.         $(".product-detail-ordernumber-container").hide();
  326.         $(".manufacturer-website").hide();
  327.         $("#detail-config-request").attr('href', 'mailto:s.toth@pse-technik.de?subject=Anfrage für {{ page.product.translated.name }}&body=Ihr Firmenname: %0D%0A %0D%0A Ihr Vor- und Nachname: %0D%0A %0D%0A Ihre Telefonnummer: %0D%0A %0D%0A Ihre Nachricht: %0D%0A');
  328.         $( document ).ready(function() {
  329.           $("#x-order-tab").hide();
  330.         });
  331.     </script>
  332.     {% endif %}
  333.     {% if page.product.productNumber == "parking3000" %}
  334.         <script>
  335.         $("#detail-config-request").attr('href', 'mailto:s.toth@pse-technik.de?subject=Anfrage für {{ page.product.translated.name }}&body=Ihr Firmenname: %0D%0A %0D%0A Ihr Vor- und Nachname: %0D%0A %0D%0A Ihre Telefonnummer: %0D%0A %0D%0A Ihre Nachricht: %0D%0A');
  336.         $(".manufacturer-website").hide();
  337.         $(".xconfig_start_block").hide();
  338.         $(".x-chosen-article-box").hide();
  339.     </script>
  340.     {% endif %}
  341.     <script>
  342.     var groupIds     = new Array();
  343.     var groupValues    = new Array();
  344.     var start_variant = getSearchParams("xconfig");
  345.     var num            = 0;
  346.     var original_price = $(".product-detail-price").html();
  347.     var brutto_price = $(".product-detail-price-brutto").html();
  348.     var productnumber = "{{ page.product.productNumber }}";
  349.     var currency = "{{ context.currency.isoCode }}";
  350.     var main_price = 0;
  351.     var sitelink = 'https://'+window.location.hostname+window.location.pathname;
  352.     {% if not has_config %}
  353.     main_price = {{ page.product.calculatedPrice.unitPrice }};
  354.     {% endif %}
  355.     $( ".tab-button" ).click(function() {
  356.       var tab = $(this).attr("value");
  357.       $( ".tab-button" ).removeClass("tab-active");
  358.       $(this).addClass("tab-active");
  359.       $( ".product-detail-tab-content" ).css("display", "none");
  360.       $( "#tab-"+tab ).css("display", "block");
  361.       if (tab != "price") {
  362.         $( ".product-detail-form-container" ).hide();
  363.       } else {
  364.         $( ".product-detail-form-container" ).show();
  365.       }
  366.     });
  367.     $( document ).ready(function() {
  368.       $.getScript("https://xconfig003.com/mvc_structure2/assets/js/jquery-ui.js", function() {
  369.         getConfiguration(0, productnumber, groupIds, groupValues, start_variant);
  370.       });
  371.       var data_mail = $("#x_share_mail").attr("data");
  372.       var data_facebook = $("#x_share_facebook").attr("data");
  373.       var data_twitter = $("#x_share_twitter").attr("data");
  374.       var data_linkedin = $("#x_share_linkedin").attr("data");
  375.       $("#x_share_mail").attr("href", data_mail + sitelink);
  376.       $("#x_share_facebook").attr("href", data_facebook + sitelink);
  377.       $("#x_share_twitter").attr("href", data_twitter + sitelink);
  378.       $("#x_share_linkedin").attr("href", data_linkedin + sitelink);
  379.     });
  380.     function getConfiguration(id, productnumber, option_ids, value_ids, start_variant) {
  381.       $.ajax({
  382.         url:"https://xconfig003.com/mvc_structure2/get_configuration_poller.php",
  383.         type:'POST',
  384.         dataType: 'json',
  385.         data: { id: id, productnumber: productnumber, option_ids: option_ids, value_ids: value_ids , start_variant: start_variant},
  386.         success: function(data){
  387.           $('.x-accessory-item-container').hide();
  388.           $('.x-accessories-headline').hide();
  389.           var main_tpl = decodeURIComponent(escape(window.atob(data.config_main_tpl)));
  390.           var footer_tpl = decodeURIComponent(escape(window.atob(data.config_footer_tpl)));
  391.           $('#xconfig_body').html(main_tpl);
  392.           $('#xconfig_footer').html(footer_tpl);
  393.           $('#xconfigDesc').val(data.config_description);
  394.           var buy_btn = $('.btn-buy');
  395.           var text = data.config_description;
  396.           //text = text.replace("$$", "");
  397.           //var newchar = ", %0D%0A";
  398.           //text = text.split("$$").join(newchar);
  399.           text = text.replaceAll(",", ", %0D%0A");
  400.           if (text != "") {
  401.             if (productnumber == "SchrankeS" || productnumber == "parking" || productnumber == "industrial" ||
  402.               productnumber == "koloss" || productnumber == "solar" || productnumber == "parking3000") {
  403.               $("#detail-config-request").attr('href',"mailto:s.toth@pse-technik.de?subject=Anfrage für {{ page.product.translated.name }}&body=Ihr Firmenname: %0D%0A %0D%0A Ihr Vor- und Nachname: %0D%0A %0D%0A Ihre Telefonnummer: %0D%0A %0D%0A Ihre Konfiguration: %0D%0A"+ text + "%0D%0A Ihre Nachricht: %0D%0A");
  404.             } else {
  405.               $("#detail-config-request").attr('href',"mailto:m.wette@pse-technik.de?subject=Anfrage für {{ page.product.translated.name }}&body=Ihr Firmenname: %0D%0A %0D%0A Ihr Vor- und Nachname: %0D%0A %0D%0A Ihre Telefonnummer: %0D%0A %0D%0A Ihre Konfiguration: %0D%0A"+ text + "%0D%0A Ihre Nachricht: %0D%0A");
  406.             }
  407.             if (productnumber == "parking3000") {
  408.               $("#cart_primary").hide();
  409.               $(".x-calc-table").hide();
  410.               $(".xprice-netto-row").hide();
  411.               $(".xprice-brutto-row").hide();
  412.               $(".x-select").hide();
  413.               $(".product-detail-tax-container-table").hide();
  414.               $(".netto-container").html('<p class="product-detail-price">Preis auf Anfrage</p><p>Wir erstellen Ihnen gern ein Angebot. Einfach konfigurieren und Produktberatung anfragen! Weitere Details klären wir in einem persönlichen Gespräch.</p>');
  415.               $(".netto-container").css({"float": "inherit", "width": "100%"});
  416.               //$(".netto-container").hide();
  417.               $(".brutto-container").hide();
  418.               $(".product-detail-delivery-information").hide();
  419.               $(".product-detail-tax-container").hide();
  420.               $(".xconfig_start_block").hide();
  421.               $(".x-chosen-article-box").hide();
  422.               $(".product-detail-ordernumber-container").hide();
  423.               $(".manufacturer-website").hide();
  424.               $( document ).ready(function() {
  425.                 $("#x-order-tab").hide();
  426.               });
  427.             }
  428.           }
  429.           value_ids.forEach (function (value_id, index) {
  430.             if (value_id) {
  431.               $( ".config--has-summary" ).show();
  432.             }
  433.           });
  434.           if(value_ids.length == 0) {
  435.             $( ".config--has-summary" ).hide();
  436.           }
  437.           if(data.config_complete) {
  438.             buy_btn.removeAttr('disabled');
  439.           } else {
  440.             buy_btn.attr('disabled', 'disabled');
  441.           }
  442.           //if (data.variant_product_productnumber != null) {
  443.           //    $("#xconfigProductNumber").html(data.variant_product_productnumber;
  444.           //}
  445.           //if (data.variant_product_ean != null) {
  446.           //    $("#xconfigEan").html(data.variant_product_ean;
  447.           //}
  448.           var buy_form = $("#productDetailPageBuyProductForm");
  449.           buy_form.attr("action", "/checkout/xconfig-line-item/add");
  450.           if (productnumber != "SchrankeS" && productnumber != "parking" && productnumber != "industrial" &&
  451.             productnumber != "koloss" && productnumber != "solar" && productnumber != "parking3000") {
  452.             if (data.variant_product_price1.raw != null) {
  453.               main_price = data.variant_product_price1.raw;
  454.               if (main_price >= 50) {
  455.                 var vk_text = "</span><br>inkl. MwSt. inkl. Versandkosten"
  456.                 $(".product-detail-tax-link").html("exkl. MwSt. inkl. Versandkosten");
  457.               } else {
  458.                 var vk_text = "</span><br>inkl. MwSt. zzgl. Versandkosten"
  459.                 $(".product-detail-tax-link").html("exkl. MwSt. zzgl. Versandkosten");
  460.               }
  461.               if (currency == "CHF") {
  462.                 $(".product-detail-price").html(data.variant_product_price1_chf.formatted);
  463.                 $("#x-main-article-price").html(data.variant_product_price1_chf.formatted);
  464.                 $(".product-detail-price-brutto").html("<span class='brutto-price-number'>" +data.variant_product_price1_brutto_chf.formatted + vk_text);
  465.               } else {
  466.                 $(".product-detail-price").html(data.variant_product_price1.formatted);
  467.                 $("#x-main-article-price").html(data.variant_product_price1.formatted);
  468.                 $(".product-detail-price-brutto").html("<span class='brutto-price-number'>" +data.variant_product_price1_brutto.formatted + vk_text);
  469.               }
  470.               calcprice();
  471.             }
  472.           }
  473.           $(".xconfig_description").html(data.config_product_description);
  474.           // if (data.variant_product_media != "") {
  475.           // var gallery_image = $(".gallery-slider-image").first();
  476.           // $('#xconfigMedia').val(data.variant_product_media[0].media_path);
  477.           // gallery_image.attr("src", data.variant_product_media[0].media_path.replace(/ /g, '%20'));
  478.           // gallery_image.attr("srcset", data.variant_product_media[0].media_path.replace(/ /g, '%20')+" 1921w, "+data.variant_product_media[0].media_path.replace(/ /g, '%20')+" 1920w, "+data.variant_product_media[0].media_path.replace(/ /g, '%20')+" 800w, "+data.variant_product_media[0].media_path.replace(/ /g, '%20')+" 400w");
  479.           // gallery_image.attr("data-full-image", data.variant_product_media[0].media_path.replace(/ /g, '%20'));
  480.           // $( ".product-media-append" ).hide();
  481.           // } else {
  482.           //if(data.config_complete) {
  483.           //    $( ".product-media-append" ).show();
  484.           //} else {
  485.           //    $( ".product-media-append" ).hide();
  486.           //}
  487.           // }
  488.           if (productnumber == "SchrankeS" || productnumber == "parking" || productnumber == "industrial" ||
  489.             productnumber == "koloss" || productnumber == "solar" || productnumber == "parking3000") {
  490.           } else {
  491.             var item_pdf = "";
  492.             if (data.variant_product_media != "") {
  493.               data.variant_product_media.forEach(function(item){
  494.                 if(item.media_path.includes('pdf')) {
  495.                   item_pdf = item_pdf +  '<a class="pdf-media-download" target="_blank" rel="noopener noreferrer" href="'+ item.media_path +'">Download: '+ item.media_name +'.pdf</a> <br />';
  496.                 }
  497.               });
  498.               $("#pdf-media").html(item_pdf);
  499.             }
  500.             if (item_pdf == "") {
  501.               $("#pdf-media").html('Leider gibt es für diesen Artikel bzw. für die von Ihnen gewählte Variante bisher keine Datenblätter. Sie können jedoch unter 0 23 73 / 1 78 09-11 oder <a href="mailto:m.wette@pse-technik.de" target="_self">m.wette@pse-technik.de</a> bei Frau Wette eine Anfrage für ein Datenblatt stellen oder weitere Informationen zu diesem Produkt einholen.');
  502.             }
  503.           }
  504.           if(data.variant_product_start_config.values != "" && data.variant_product_start_config.options != "") {
  505.             $("#xStartGroupValues").val(data.variant_product_start_config.values);
  506.             $("#xStartGroupIds").val(data.variant_product_start_config.options);
  507.             $("#xconfig_start_description").html(data.variant_product_start_config_description);
  508.             $('#xconfigStartDesc').val(data.variant_product_start_config_description);
  509.             $('#startCartBtn').removeAttr('disabled');
  510.             $("#xGroupIds").val(data.variant_product_start_config.values);
  511.             $("#xGroupValues").val(data.variant_product_start_config.options);
  512.             $('#xconfigDesc').val(data.variant_product_start_config_description);
  513.             buy_btn.removeAttr('disabled');
  514.           } else {
  515.             $('#startCartBtn').attr('disabled', 'disabled');
  516.             $('.xconfig_start_block').hide();
  517.           }
  518.           if (main_tpl == "") {
  519.             $('#startCartBtn').hide();
  520.             $('.xconfig_start_block').hide();
  521.           }
  522.           $(".accessory-hidden-input-id").each(function(e){
  523.             this.value = data.variant_id + $(this).attr("originalid");
  524.           });
  525.           if (data.product_accessories != "") {
  526.             data.product_accessories.forEach(function(item){
  527.               var product_number = item.product.base.product_number;
  528.               product_number = product_number.replace(".", "_")
  529.               $('#accessory_'+product_number).show();
  530.               $('.x-accessories-headline').show();
  531.             });
  532.           }
  533.           if (data.variant_product_accessories != "") {
  534.             data.variant_product_accessories.forEach(function(item){
  535.               var product_number = item.product.base.product_number;
  536.               product_number = product_number.replace(".", "_")
  537.               $('#accessory_'+product_number).show();
  538.               $('.x-accessories-headline').show();
  539.             });
  540.           }
  541.           $("#xVariantId").val(data.variant_id);
  542.           $(".accessory-variant-id").val(data.variant_id);
  543.           if (productnumber == "SchrankeS" || productnumber == "parking" || productnumber == "industrial" ||
  544.             productnumber == "koloss" || productnumber == "solar") {
  545.             $(".product--headline").html("Konfigurieren Sie jetzt Ihre Anfrage:");
  546.           }
  547.           if (productnumber == "parking3000") {
  548.             $(".product--headline").html("Konfigurieren Sie jetzt Ihren Anfrage:");
  549.             buy_btn.removeAttr('disabled');
  550.           }
  551.           var steps = value_ids.filter(obj => obj != "").length;
  552.           if (steps != 0) {
  553.             gtag('event', 'Konfigurator: '+productnumber, {'event_category': 'configuration','event_label': 'Schritt:'+steps,'value': true});
  554.             //gtag('event', 'Konfigurator: '+productnumber, {
  555.             //  'SCHRITT': steps
  556.             //});
  557.           }
  558.         }
  559.       });
  560.     }
  561.     function submitXData() {
  562.       $("#xconfig_body :input[name^='group']").each(function(e){
  563.         if(this.type == "hidden" || this.type == "text")
  564.         {
  565.           string = this.name;
  566.           string = string.substring(string.lastIndexOf("[")+1,string.lastIndexOf("]"));
  567.           groupIds[num] = string;
  568.           groupValues[num] = this.value;
  569.           num++;
  570.         }
  571.       });
  572.       $("#xGroupIds").val(groupIds);
  573.       $("#xGroupValues").val(groupValues);
  574.       getConfiguration(0, productnumber, groupIds, groupValues);
  575.       groupIds = [];
  576.       groupValues = [];
  577.       num = 0;
  578.       return false;
  579.     }
  580.     function getSearchParams(k){
  581.       var p={};
  582.       location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
  583.       return k?p[k]:p;
  584.     }
  585.     function submitRestart() {
  586.       var groupIds     = new Array();
  587.       var groupValues = new Array();
  588.       config_count = 0;
  589.       getConfiguration(0, productnumber, groupIds, groupValues);
  590.       $('#startCartBtn').removeAttr('disabled');
  591.       $('.xconfig_start_block').show();
  592.       $(".product-detail-price").html(original_price);
  593.       $("#x-main-article-price").html(original_price);
  594.       $(".product-detail-price-brutto").html(brutto_price);
  595.     }
  596.     function calcprice() {
  597.       var main_qty = $( ".custom-select option:selected" ).text();
  598.       var fullprice = main_qty * main_price;
  599.       $('.x-accessory-item').each(function() {
  600.         if($( this ).hasClass("active")) {
  601.           accessory_price = $( this ).attr("data-price");
  602.           accessory_qty = $( this ).attr("data-qty");
  603.           full_accessory = accessory_price * accessory_qty;
  604.           fullprice = fullprice + full_accessory;
  605.         }
  606.       });
  607.       if (currency == "CHF") {
  608.         fullprice_brutto = fullprice * 1.077;
  609.         fullprice_brutto = formatPrice(fullprice_brutto, "CHF")
  610.         fullprice = formatPrice(fullprice, "CHF*")
  611.       } else {
  612.         fullprice_brutto = fullprice * 1.19;
  613.         fullprice_brutto = formatPrice(fullprice_brutto, "€")
  614.         fullprice = formatPrice(fullprice, "€*")
  615.       }
  616.       $(".x-full-price").html(fullprice);
  617.       $(".x-full-price-brutto").html(fullprice_brutto);
  618.     }
  619.     function formatPrice(num, currency) {
  620.       var p = Number(num).toFixed(2).split(".");
  621.       return p[0].split("").reverse().reduce(function(acc, num, i, orig)
  622.       {
  623.         return num + (i && !(i % 3) ? "." : "") + acc;
  624.       } , "") + "," + p[1] + " "+ currency;
  625.     }
  626.     $("#x_info_click").click(function () {
  627.       $('#x_info_modal').addClass("show");
  628.     });
  629.     $(".x-modal-dialog .x-dialog-close").click(function(){
  630.       $(this).closest(".x-modal-dialog").removeClass("show");
  631.     });
  632. </script>
  633. {% endblock %}
  634. {% block page_product_detail_delivery_informations %}
  635. {% endblock %}
  636. {% block page_product_detail_tax %}
  637. {% endblock %}
  638. {% block page_product_detail_ordernumber_container %}
  639.     {% for shop_detail in page.extensions.xconfig.product.data.shop_details %}
  640.         {% if shop_detail.type_id == "2" %}
  641.             <button class="xaccordion">{{ shop_detail.item_name }}</button>
  642.             <div class="xpanel">
  643.                 <p>{{ shop_detail.item_value|raw }}</p>
  644.             </div>
  645.         {% endif %}
  646.     {% endfor %}
  647.     <script>
  648. var icon_delete_html = '<span class="icon icon-trash" title="entfernen"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="#f01d4a" fill-rule="evenodd" d="M5 21c0 .5523.4477 1 1 1h12c.5523 0 1-.4477 1-1V9H5v12zM17 3h2c1.6569 0 3 1.3431 3 3v2c0 .5523-.4477 1-1 1v12c0 1.6569-1.3431 3-3 3H6c-1.6569 0-3-1.3431-3-3V9c-.5523 0-1-.4477-1-1V6c0-1.6569 1.3431-3 3-3h2c0-1.6569 1.3431-3 3-3h4c1.6569 0 3 1.3431 3 3zM7 13v5c0 .5523.4477 1 1 1s1-.4477 1-1v-5c0-.5523-.4477-1-1-1s-1 .4477-1 1zm4 0v5c0 .5523.4477 1 1 1s1-.4477 1-1v-5c0-.5523-.4477-1-1-1s-1 .4477-1 1zm4 0v5c0 .5523.4477 1 1 1s1-.4477 1-1v-5c0-.5523-.4477-1-1-1s-1 .4477-1 1zM10 2c-.5523 0-1 .4477-1 1h6c0-.5523-.4477-1-1-1h-4zM4 7h16V6c0-.5523-.4477-1-1-1H5c-.5523 0-1 .4477-1 1v1z"/></svg></span>';
  649. $( ".xaccordion" ).click(function() {
  650.   this.classList.toggle("xactive");
  651.   var panel = this.nextElementSibling;
  652.   if (panel.style.maxHeight) {
  653.     panel.style.maxHeight = null;
  654.   } else {
  655.     panel.style.maxHeight = panel.scrollHeight + "px";
  656.   }
  657. });
  658. $('.cms-element-').css({
  659.   position: 'sticky',
  660.   top: '140px'
  661. });
  662. $( ".gallery-slider-image" ).click(function() {
  663.   $('.cms-element-').css({
  664.     position: 'relative'
  665.   });
  666. });
  667. $( ".modal-close" ).click(function() {
  668.   $('.cms-element-').css({
  669.     position: 'sticky'
  670.   });
  671. });
  672. $( ".custom-select" ).change(function() {
  673.   $('#x-main-article-qty').html(this.value);
  674.   $('#main_article_quantity_form').val(this.value);
  675.   calcprice();
  676. });
  677. $( ".x-accessory-item-select" ).change(function() {
  678.   var parent = $( this ).parents(".x-accessory-item");
  679.   parent.attr("data-qty", this.value)
  680.   $( "#x-acc-article-qty-"+ parent.attr("data-id") ).html(this.value);
  681.   calcprice();
  682. });
  683. $(".x-accessory-item-input").click(function() {
  684.   var parent = $( this ).parents(".x-accessory-item");
  685.   acc_qty = parent.attr("data-qty");
  686.   acc_price = parent.attr("data-price");
  687.   acc_price = formatPrice(acc_price, "€*");
  688.   acc_name = parent.attr("data-name");
  689.   acc_id = parent.attr("data-id");
  690.   if(!parent.hasClass("active")) {
  691.     parent.addClass("active");
  692.     parent.find(".accessory-hidden-input").each(function() {
  693.       $( this ).removeAttr("disabled");
  694.     });
  695.     $('.x-calc-table').append('<div class="x-acc-article lchline visible" id="x-acc-article-'+ acc_id +'"><div class="x-acc-article-name" id="x-acc-article-name'+ acc_id +'">'+ acc_name +'</div><div class="x-acc-article-qty" id="x-acc-article-qty-'+ acc_id +'">'+ acc_qty +'</div><div class="x-acc-article-price" id="x-acc-article-price'+ acc_id +'">'+ acc_price +'</div><div style="cursor: pointer;" onclick="article_delete('+ "'" + acc_id + "'" +')" class="x-article-delete"><span class="x-article-icon-delete"'+ icon_delete_html +'</span></div></div>');
  696.   } else {
  697.     parent.removeClass("active");
  698.     parent.find(".accessory-hidden-input").each(function() {
  699.       $( this ).attr("disabled", true);
  700.     });
  701.     $( "#x-acc-article-"+ acc_id ).remove();
  702.   }
  703.   calcprice();
  704. });
  705. function article_delete(acc_id) {
  706.   $("#acc_input_"+ acc_id ).click();
  707. }
  708. $( "#show-more-accessory" ).click(function() {
  709.   $( '.x-accessories-rest' ).show( "slow" );
  710.   $( '#show-more-accessory' ).hide();
  711. });
  712. $( "#show-less-accessory" ).click(function() {
  713.   $( '.x-accessories-rest' ).hide( "slow" );
  714.   $( '#show-more-accessory' ).show();
  715.   $('html, body').animate({
  716.     scrollTop: parseInt($('.x-accessories-headline').offset().top)
  717.   }, 500);
  718. });
  719. function accessoryCheck() {
  720.   let total = document.querySelectorAll('.x-accessory-item-input:checked').length;
  721.   document.getElementById("totalaccessory").innerHTML = "ausgewählte Zubehörartikel: " + total;
  722. }
  723. </script>
  724. {% endblock %}