'; $('#alert .modal-content').prepend(prependModalHtml); // Make sure to remove the modal header after it closes (this is not a default element) $("#alert").on('hide.bs.modal', function(){ $('.modal-header', '#alert').remove(); }); } else { alert('Artikel in den Warenkorb gelegt.'); } // Add extra optional products content if($('.catalogview-popup-after').length) { // Remove older versions $('.modal-body-extra').remove(); var html = (''+$('.catalogview-popup-after').html()).replace(/\r\n/g, ''); // Add class "hidden-xs" to modal-body-extra if it must be hidden for mobile $('.modal-footer').after('
' + html + '
'); // Convert all images to be responsive var imgs = $('.modal-body-extra img'); imgs.each(function(){ var _this = $(this); _this.addClass('img-responsive img-fluid'); }); // Make optional items look neat setTimeout(function(){ equalElementHeight($('.single-item .thumbnail',$('.modal-body-extra'))); },500) // Re-parse the shop to enable the order buttons var catalogView = Singleton.instance( 'CatalogView' ); catalogView.shopParse($('.modal-body-extra')); } return; } // Class to maintain configurator var CatalogViewConfigurator = function () { /** * Store all step data here */ this.configuratorData = { color: null, images: [{title: "", url: "https://www.teranda.de/file.php?id=6867b954154447fa8cdc343a95784ca9"},], steps: [] } ; /** * Update/fill a configuration result on current page with HTML * * @param el parent object to use * @return void */ this.updateResult = function (el) { var instance = this; // Get all selected options in current DOM var selectables = $('.select-optional.active,.select-configurable.active',el); // Get elements var elLines = $('.result-lines',el); var elLinesParent = elLines.closest('.panel'); var elOrderButton = $('.catalogview-configurator-result .orderout-add-line',el); var elDetailButton = $('.catalogview-configurator-result .action-details-show',el); var elCreatePDFButton = $('.catalogview-configurator-result .catalog-configurator-pdf',el); // Hide order button by default elOrderButton.prop('disabled',true); elDetailButton.prop('disabled',true); //Hide Create PDF Button by default elCreatePDFButton.prop('disabled',true); // Loop lines to show (every element represents one line) var htmlLines = ''; var price = 3757; var price2 = 3757; var pricenotax = 3157.1429; var pricediscountpercentage = 0; var pricenotax2 = 3157.1429; var shippingPrice = 0; if(shippingPrice) price += shippingPrice; var shippingPriceNotax = 0; if(shippingPriceNotax) pricenotax += shippingPriceNotax; htmlLines += '
'; selectables.each(function(index){ htmlLines += instance.getResultLineHtml($(this)); // Only fetch items with price data if (!$(this).hasClass("select-comment")) { price += parseFloat($(this).attr('data-price')).round(2); pricenotax += parseFloat($(this).attr('data-price-notax')).round(2); // Calculate normal price price2 += parseFloat($(this).attr('data-price')).round(2); pricenotax2 += parseFloat($(this).attr('data-price-notax')).round(2); } //Close line on new step if (selectables.eq(index + 1).text() && selectables.eq(index + 1).closest(".step").attr("data-step") != $(this).closest(".step").attr("data-step")) { htmlLines += "
"; htmlLines += '
'; } }); htmlLines += '
'; elLines.empty().html(htmlLines); // Set some order data $('.result-price-total',el).attr('data-value',price.round(2)); $('.result-price-total-notax',el).attr('data-value',pricenotax.round(2)); $('.result-price-sell-total',el).attr('data-value',price2.round(2)); $('.result-price-sell-total-notax',el).attr('data-value',pricenotax2.round(2)); // Show savings (discount) amount var discount = ((price / (100-pricediscountpercentage)) * pricediscountpercentage); $('.result-price-total-discount-information, .result-price-total-discount-information span',el).attr('data-value',discount.round(2)); $('.result-price-sell-total',el).attr('data-value',discount.round(2)); if(empty(discount)) $('.result-price-total-discount-information').removeClass('visible-xs').addClass('hidden'); else $('.result-price-total-discount-information').removeClass('hidden').addClass('visible-xs'); // Correct "normal" price, for current discount if(!empty(discount)) { price2 = price + ((price / (100 - pricediscountpercentage)) * pricediscountpercentage); $('.result-price-sell-total', el).attr('data-value', price2.round(2)); } // Steps with only textarea fields are always valid by default $('.step-configurable:not(:has(input))',el).each(function(){ $(this).removeClass('invalid').addClass('valid'); }); // Loop through all select-configurable elements to determine which select-comment fields have to be displayed and validate them $('.select-configurable:not(.select-comment)', el).each(function(key, value) { var stepValid = false; var elTitle = $(this).attr("data-title"); var elChecked = $(this).hasClass("active"); var elStep = $(this).closest('.step'); var elComment = $('.select-configurable.select-comment[data-title="' + elTitle +'"]',elStep); if (elComment) { if ($(elComment).data("title") == elTitle) { if (elChecked) { $(elComment).show(); $(elComment).addClass('active'); // Only validate comment fields fields which are picked if (empty($("textarea",elComment).val())) { // elStep.removeClass('valid').addClass('invalid'); } else { // elStep.removeClass('invalid').addClass('valid'); } } else { $(elComment).hide(); $(elComment).removeClass('active'); //Clear unchecked textareas //$("textarea", elComment).val(''); //Clear unchecked textareas and refill with default values $('textarea', elComment).val($('textarea', elComment).attr('data-value')); } } } }); // Reset all text messages for input validation // Do not execute this here //$('.selection-message', el).addClass('hidden'); var stepInputValidation = []; var foundSteps = []; for (var s in this.configuratorData.steps) { foundSteps.push(this.configuratorData.steps[s]['stepnumber']); } // Validate all input fields with given regex and show message if necessary $('.select-configurable.select-comment', el).each(function(key, value) { // Validate Regex var elCommentInput = $('textarea', this); var elCommentRegex = $('textarea', this).attr('data-regex'); var elStep = $(this).closest('.step-configurable'); var stepnumber = (elStep).attr('data-stepnumber'); // Check if this comment is related to a chosen configurable var elTitle = $(this).attr("data-title"); // Check if we need to extra validate by checking simular titles on select configurables var needsValidation = true; var elConfigurable = $('.select-configurable:not(.select-comment)[data-title="' + elTitle +'"]',elStep); if (elConfigurable.length > 0) { if (elConfigurable.hasClass('active')) { needsValidation = true; } else { needsValidation = false; } } // New validation if (needsValidation) { if (!empty(elCommentRegex)) { var elCommentText = $('textarea', this).val(); var regexObject = new RegExp('^' + elCommentRegex + '$','g'); // Regex is valid if (regexObject.exec(elCommentText) !== null) { $('textarea', this).off('blur'); $('.selection-message', this).removeClass('text-danger'); $(elCommentInput).removeClass('form-control-danger'); $(this).closest('.step-configurable').removeClass('invalid').addClass('valid'); // Check if all active text fields are valid if (empty( stepInputValidation[stepnumber])) stepInputValidation[stepnumber] = 0; stepInputValidation[stepnumber]++; } // Regex is not valid else { var elSelectMessage = $('.selection-message', this); //Show message when user is finished typing $('textarea', this).blur(function() { $(elSelectMessage).addClass('text-danger'); $(elCommentInput).addClass('form-control-danger'); }); elStep.removeClass('valid').addClass('invalid'); $('.action-confirm-step', elStep).attr('disabled', true); } } } // Make sure this comment is passed else { $('textarea', this).off('blur'); $('.selection-message', this).removeClass('text-danger'); $(elCommentInput).removeClass('form-control-danger'); // Check if there are radio select that are not selected var elConfigurables = $('.select-configurable:not(.select-comment)',elStep); if (elConfigurables.length > 0) { var foundActiveConfigurable = false; elConfigurables.each(function(index) { if ($(this).hasClass('active')) foundActiveConfigurable = true; }); if (!foundActiveConfigurable) { elStep.removeClass('valid').addClass('invalid'); } } else { elStep.removeClass('invalid').addClass('valid'); // Check if all needed text fields are valid if (empty( stepInputValidation[stepnumber])) stepInputValidation[stepnumber] = 0; stepInputValidation[stepnumber]++; } } }); // Check if all text fields are okay per step if (!empty(stepInputValidation)) { for (var j in stepInputValidation) { var inputElementCount = $('[data-stepnumber="' + j + '"] .select-configurable.select-comment').length; var elStep = $('[data-stepnumber="' + j + '"]'); if (stepInputValidation[j] == inputElementCount) { elStep.removeClass('invalid').addClass('valid'); } else { elStep.removeClass('valid').addClass('invalid'); } } } // All parent steps with no direct content only substeps which are all valid should also be valid itself $('.step:not(:has(.invalid))',el).each(function(){ // Not needed // $(this).removeClass('invalid').addClass('valid'); }); // All steps without a selection are incomplete $('.step', el).removeClass('incomplete'); $('.step:has(.step-selection)',el).each(function(){ var step = $(this); $('.step-selection',step).each(function(){ var selection = $(this); if($('input[type=radio]',selection).length && !$('input[type=radio]:checked',selection).length) { // There are radio button but none is selected so form is incomplete step.addClass('incomplete'); step.addClass('invalid'); } }); }) // Enable order button when validation is successful //var invalid = $('.step-configurable.invalid',el).length; // Only check substeps in this template var invalid = $('.step-sub .step-configurable.invalid',el).length; var notprocessed = $('.step-sub .step-configurable.not-processed',el).length; if(!invalid && !notprocessed) { elOrderButton.prop('disabled',false); elDetailButton.prop('disabled',false); elCreatePDFButton.prop('disabled',false); } // track remaining steps var countInvalidSteps = notprocessed; if (countInvalidSteps > 0) { $('.count-invalid-steps').show(); $('.count-invalid-steps .counter').text(countInvalidSteps); // Show details link $('.action-details-show').addClass('hidden'); // Add Tooltip to add to cart mobile bottom button var remainingStepsText = $('.count-invalid-steps').text(); // $('.orderout-add-line-wrapper').tooltip(); $('.orderout-add-line-wrapper', el).attr('title', remainingStepsText).attr('data-original-title', remainingStepsText); } else { $('.count-invalid-steps').hide(); // Show details link $('.action-details-show').removeClass('hidden'); // Remove tooltip on add to cart button $('.orderout-add-line-wrapper', el).attr('title', '').attr('data-original-title', ''); } // Show all correct prices instance.showPrices(el); }; /** * Validate a step based on changed data in configurable elements * * @param elObject target element to use * @param el parent object to use */ this.validateStep = function (elObject, el, confirmed) { var instance = this; var mainEl = $( '#e9842939e57e4814a18d6aca4fbb74dd, .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd'); var elStep = elObject.closest('.step', el); if (elStep) { var stepNumberFull = elStep.attr('data-stepnumber'); var stepNumbers = stepNumberFull.split('.'); var stepNumber = (!empty(stepNumbers[0])) ? stepNumbers[0] : null; var substepNumber = (!empty(stepNumbers[1])) ? stepNumbers[1] : null; var valid = elStep.hasClass('valid'); var color = elObject.attr('data-color'); var active = elObject.hasClass('active'); var image = elObject.attr('data-image'); var imageData = []; var hasconfirm = elStep.attr('data-confirm') == 1 ? true : false; elStep.addClass('current-step'); elStep.removeClass('processed').addClass('not-processed'); // Check some extra things if the step is valid if ($('.radio .select-configurable').length > 0) { if ($('.radio .select-configurable input:checked').length == 0) { valid = false; } } if (!valid) $('.action-confirm-step', elStep).attr('disabled', true); if (!empty(image)) { imageData = JSON.parse(image); } // Get images from active option when confirmation is given if (hasconfirm && !empty(confirmed)) { var elImageSelect = $('.select-configurable.active', elStep); var image = elImageSelect.attr('data-image'); if (!empty(image)) { imageData = JSON.parse(image); } $(elStep).removeClass('valid').addClass('invalid'); $('.action-confirm-step', elStep).attr('disabled', true); } // Set a new color if given if (!empty(color)) { this.configuratorData.color = color; } // Set the image based on color if (!empty(imageData)) { for (var i in imageData) { if (imageData[i]['title'] == this.configuratorData.color) { var imageUrl = imageData[i]['url']; if (!empty(imageUrl)) { $('.catalogview-image-main .catalogview-image-main-img', mainEl).attr('src', imageUrl); // Set mobile picture (every step contains its own picture) $('.mobile-main-image .mobile-main-image-img', elStep).attr('src', imageUrl).show(); } } } } else { // Empty image src on mobile to hide it if step contains no image data $('.mobile-main-image .mobile-main-image-img', elStep).attr('src', '//:0'); } this.resetConfiguratorSteps(stepNumberFull); // Check if confirm was needed if (empty(confirmed)) { var hasconfirm = elStep.attr('data-confirm') == 1 ? true : false; if (valid) $('.action-confirm-step', elStep).attr('disabled', false); if (hasconfirm) return false; } // Next step if (valid) { elStep.removeClass('current-step'); elStep.removeClass('not-processed').addClass('processed'); elStep.removeClass('invalid').addClass('valid'); // $('.mobile-main-image', elStep).removeClass('hidden'); // Add step data to configurator var stepData = { stepnumber: stepNumberFull, valid: valid }; // Add step data this.addStep(stepNumberFull, stepData); if (!empty(substepNumber)) { // When step 2 is valid, check for best matching product based on user sizes if (stepNumberFull == '1.2') { // Get sizes var size1 = $('.select-comment:first textarea', elStep).val(); var size2 = $('.select-comment:last textarea', elStep).val(); var sizes = {'size1' : size1, 'size2' : size2}; // Perform a lookup to eventual forward to better matching product if (!empty(size1) && !empty(size2)) { this.checkProductcombinationBasedOnSize('0f66ba09c0b64d9585c80ab76b5de03a', sizes, function(response) { if (response && typeof response != undefined && response.hasOwnProperty('data')) { if (response.data !== false) { // Check if product is current product, return false if so if (response.data == 'tr15-5060x4500') { instance.showNextStep(mainEl, el, elStep, stepNumber, substepNumber); } else { // Set extra productcombination http params var jsonParams = { 'stepdata' : [] }; // Loop through step and get data if (instance.configuratorData.steps.length > 0 ) { for (var j in instance.configuratorData.steps) { if (!empty(instance.configuratorData.steps[j]['stepnumber'])) { // Search for catalogitems var stepNumber2 = instance.configuratorData.steps[j]['stepnumber']; var catalogitems = []; var comments = []; var color = ''; var selectables = $('[data-stepnumber="'+ stepNumber2 +'"] .select-configurable.active'); // Push catalogitems selectables.each(function(index) { var catalogitem = $(this).attr('data-catalogitem'); if (!empty($(this).attr('data-color'))) color = $(this).attr('data-color'); if (!empty(catalogitem)) catalogitems.push(catalogitem); }); // Check comments var selectables = $('[data-stepnumber="'+ stepNumber2 +'"] .select-comment'); // Push comments selectables.each(function(index) { var commentText = $('textarea', this).val(); if (!empty(commentText)) comments.push(commentText); }); var stepData = { stepnumber: stepNumber2, catalogitems: catalogitems, color: color, comments: comments }; jsonParams.stepdata.push(stepData); } } } var urlEncodedStr = encodeURIComponent(JSON.stringify(jsonParams)); // forward to new location var newLocation = '/shop/produkt!' + response.data + '&productcombination=' + urlEncodedStr; var loaderStepImg = config.path.client.app_img + 'popup/loader-32.gif'; var loaderStepHtml = '
' + __('loading...') + '
'; $('.substep-actions', elStep).append(loaderStepHtml); location.href = newLocation; } } else { instance.showNextStep(mainEl, el, elStep, stepNumber, substepNumber); } } else { instance.showNextStep(mainEl, el, elStep, stepNumber, substepNumber); } }, function(error) { instance.showNextStep(mainEl, el, elStep, stepNumber, substepNumber); }); } else { instance.showNextStep(mainEl, el, elStep, stepNumber, substepNumber); } } else { instance.showNextStep(mainEl, el, elStep, stepNumber, substepNumber); } } } else { elStep.removeClass('processed').addClass('not-processed'); } } // track remaining steps (after validation we need to update some data) var notprocessed = $('.step-sub .step-configurable.not-processed', mainEl).length; var countInvalidSteps = notprocessed; if (countInvalidSteps > 0) { $('.count-invalid-steps').show(); $('.count-invalid-steps .counter').text(countInvalidSteps); } else { $('.count-invalid-steps').hide(); } } /** * Show next step * */ this.showNextStep = function(mainEl, el, elStep, stepNumber, substepNumber) { // Go to next substep if available var nextSubstepNumber = stepNumber + '.' + (parseInt(substepNumber, 10) + 1); if ($('[data-stepnumber="' + nextSubstepNumber + '"]', el).length > 0) { $('[data-stepnumber="' + nextSubstepNumber + '"] .panel-collapse', el).addClass('in'); } // Go to new root step if available else { // Go to next substep var nextStepNumber = parseInt(stepNumber, 10) + 1; var nextSubstepNumber = nextStepNumber + '.' + 1; if ($('[data-stepnumber="' + nextSubstepNumber + '"]', el).length > 0) { $('[data-stepnumber="' + nextSubstepNumber + '"] .panel-collapse', el).addClass('in'); } } // Set default values of text fields if ($('[data-stepnumber="' + nextSubstepNumber + '"]', el).length > 0) { // Scroll automatically to next step if exists setTimeout(function() { var offsetScrollStep = 0; // Desktop / large screens if (responsiveSize != 'xs') { // Check if already scrolled var bodyOffset = $(document).scrollTop(); if (bodyOffset < 20) { offsetScrollStep = 64; } else { offsetScrollStep -= 1; } var stEls = $('.container-sticky-wrapper, .catalogview-title'); } // Mobile else { var stEls = $('.loc-h-2'); } if (stEls) { stEls.each(function(index, value) { offsetScrollStep += $(this).outerHeight(); }); // Extra margin for border offsetScrollStep += 1; } $('html, body').animate({ scrollTop: ( $('[data-stepnumber="' + nextSubstepNumber + '"]', el).offset().top - offsetScrollStep ) }, 800, 'swing', function() { }); // End scroll }, 500); $('[data-stepnumber="' + nextSubstepNumber + '"] .select-configurable textarea').each(function(key, value) { var commentValue = $(this).attr('data-value'); $(this).val(commentValue); if (commentValue) $(this).closest('select-comment').addClass('active'); }); // Check if a option is set and if none then disable button var nextStep = '[data-stepnumber="' + nextSubstepNumber + '"]'; $(nextStep).addClass('current-step'); $(nextStep).removeClass('valid'); $(nextStep).removeClass('processed').addClass('not-processed'); if ( $('.radio .select-configurable', nextStep).length > 0 ) { if ($('.radio .select-configurable.active', nextStep).length == 0) { $('.action-confirm-step', nextStep).attr('disabled', true); } } // Validate the next step in advance var nextElement = $('.action-confirm-step', nextStep); this.updateResult(mainEl); this.validateStep(nextElement, mainEl); } // No more steps else { elStep.addClass('current-step'); this.updateResult(mainEl); } } /** * Add step data to configurator * */ this.addStep = function(stepnumber, data, el) { if (!empty(this.configuratorData.steps)) { var found = false; for (var j in this.configuratorData.steps) { if (this.configuratorData.steps[j]['stepnumber'] == stepnumber) { found = true; } } } if (!found) { this.configuratorData.steps.push(data); } } /** * Reset configurator from a certain step * * @param stepnumber * */ this.resetConfiguratorSteps = function(stepnumber) { var el = $( '#e9842939e57e4814a18d6aca4fbb74dd, .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd'); var foundSteps = []; if (this.configuratorData.steps.length > 0) { var found = false; for (var j in this.configuratorData.steps) { foundSteps.push(this.configuratorData.steps[j]['stepnumber']); // All elements after current step should be cleaned if (found) { // Reset all steps after given stepnumber var sn = this.configuratorData.steps[j]['stepnumber']; var el2 = $( '#e9842939e57e4814a18d6aca4fbb74dd ' + ' ' + ' [data-stepnumber="' + sn + '"]' + ',' + ' .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd' + ' [data-stepnumber="' + sn + '"]' ); var els = $('.select-configurable,.select-optional,.select-configurable input,.select-configurable textarea,.select-optional input',el2); els.removeClass('active'); els.prop('checked', false); $('.select-configurable textarea',el2).prop('value', ''); // Reset current step data var currentStep = els.closest('.step'); currentStep.removeClass('valid invalid'); $('.panel-collapse', currentStep).removeClass('in'); $('.btn', currentStep).attr('disabled', false); currentStep.addClass('invalid'); currentStep.removeClass('processed').addClass('not-processed'); // Reset image for mobile $('.mobile-main-image .mobile-main-image-img', currentStep).attr('src', '//:0'); } if (this.configuratorData.steps[j]['stepnumber'] == stepnumber) { found = true; } } // Reset some elements that are out of scope if (foundSteps.length > 0) { var els2 = $('.step-sub .step', el); // Loop every sub step $(els2).each(function(key, val) { var stepnumber2 = $(this).attr('data-stepnumber'); if (foundSteps.indexOf(stepnumber2) === -1 && stepnumber2 != stepnumber) { var els3 = $('.select-configurable,.select-optional,.select-configurable input,.select-configurable textarea,.select-optional input',$(this)); els3.removeClass('active'); els3.prop('checked', false); $('.panel-collapse', $(this)).removeClass('in'); $(this).removeClass('valid').addClass('invalid'); $(this).removeClass('processed').addClass('not-processed'); } }); } } // Remove data from step data if (this.configuratorData.steps.length > 0) { var found = false; for (var j in this.configuratorData.steps) { if (this.configuratorData.steps[j]['stepnumber'] == stepnumber) { found = j + 1; } } if (found !== false) { if (!empty(this.configuratorData.steps[found])) { this.configuratorData.steps.splice(found); } } } var stepEls = $('.step-sub .step', el); stepEls.each(function(key, value) { var stepnumber2 = $(this).attr('data-stepnumber'); if (foundSteps.indexOf(stepnumber2) === -1 && stepnumber2 != stepnumber) { $(this).removeClass('processed').addClass('not-processed'); } else { } }); // Allow button to gain active state, then re-parse result catalogViewConfigurator.updateResult(el); } /** * Confirm step manually by client via button * * @param elObject target element to use * @param el parent object to use */ this.confirmStep = function(elObject, el) { var elStep = elObject.closest('.step', el); if (elStep) { var valid = elStep.hasClass('valid'); var hasconfirm = elStep.attr('data-confirm') == 1 ? true : false; // Next step if (valid && hasconfirm) { // Disable button on success elObject.attr('disabled', true); this.validateStep(elObject, el, true); } else { return false; } } } /** * Get a single line in HTML based on provided element with data * * @param el with values to show * @return string with full HTML of the line */ this.getResultLineHtml = function (el) { var instance = this; // Build HTML var html =''; var type = 'unknown'; if(el.hasClass('select-optional')) type = 'optional'; if(el.hasClass('select-configurable')) type = 'configurable'; //Check if there are values of configurable step-comments var lineValue = $('textarea', el).val(); if (empty(lineValue)) lineValue = ""; var data_price = (el.attr('data-price')) ? el.attr('data-price') : 0; var data_price_notax = (el.attr('data-price-notax')) ? el.attr('data-price-notax') : 0; html += '
'; html += ''; html += ''; html += ''; html += '' + el.attr('data-title') + ''; html += '' + el.attr('data-description') + ''; if (lineValue) html += '' + lineValue + ''; html += '
'; return html; }; /** * Update price elements to show all formatted prices * * All elements with class "price" and "count" and attribute "data-value" in the provided element * will get the formatted value as content * * @param el object element(s) to parse * @return void */ this.showPrices = function ( el ) { var instance = this; var catalogView = Singleton.instance( 'CatalogView' ); $('.price[data-value]',el).each(function(){ var html = ''; if($(this).attr('data-value')) html = catalogView.formatPrice( $(this).attr('data-value'), true, false ); $(this).html(html); }); $('.count[data-value]',el).each(function(){ var html = ''; if($(this).attr('data-value')) html = $(this).attr('data-value'); $(this).html(html); }) } /** * Build and return the URL to open the PDF * * @param item to show the PDF for * @param itemsExtra with all selected items in the configuration, to include in the PDF * @return string url */ this.getPdfLink = function (item, itemsExtra) { var url = config.path.client['export'] + '/?template=catalog-productcombination-offer.php&entity=Productcombination&format=pdf&item=' + item + '&data=' + itemsExtra + '&check=' + 'e407bd7d'; return url; } /** * Get a matching result based on user sizes and current product * * This is a lookup to see if there is a better matching product size for given sizes by user * * @param item product guid * @param $sizes array with 2 size params * */ this.checkProductcombinationBasedOnSize = function($item, $sizes, cbsuccess, cberror) { var instance = this; var Productcombination = Singleton.instance('Productcombination'); return Productcombination.getProductcombinationBasedOnSize($item, $sizes, cbsuccess, cberror); } /** * Initiation of product params * * This set given product params on page load and triggers some steps * */ this.initProductcombinationParams = function() { var el = $( '#e9842939e57e4814a18d6aca4fbb74dd, .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd' ); var productcombinationParams = null if (productcombinationParams) { productcombinationParams = JSON.parse(productcombinationParams); // Set correct values for this productcombination if (!empty(productcombinationParams.stepdata)) { for (var j in productcombinationParams.stepdata) { var stepNumber = productcombinationParams.stepdata[j]['stepnumber']; var catalogitems = productcombinationParams.stepdata[j]['catalogitems']; var color = productcombinationParams.stepdata[j]['color']; var comments = productcombinationParams.stepdata[j]['comments']; if ($('[data-stepnumber="' + stepNumber + '"]', el).length > 0) { var elStep = $('[data-stepnumber="' + stepNumber + '"]', el); if (catalogitems) { for (k in catalogitems) { var value = catalogitems[k]; if ($('.select-configurable[data-catalogitem="' + value + '"]',elStep).length > 0) { // $('.select-configurable[data-catalogitem="' + value + '"]',elStep).trigger('click'); } } } if (stepNumber == '1.1') { if (color) { $('.select-configurable[data-color="' + color + '"]',elStep).trigger('click'); } $('.action-confirm-step', elStep).trigger('click'); } if (comments) { for (k in comments) { var index = parseInt(k, 10) + 1; var commentValue = comments[k]; $('.select-comment:nth-child(' + index +') textarea',elStep).val(commentValue); } } if (stepNumber == '1.2') { this.updateResult(el); this.validateStep($('.action-confirm-step', elStep), el); $('.action-confirm-step', elStep).trigger('click'); } } } } } } }; var catalogViewConfigurator = new CatalogViewConfigurator(); /** * Callback to use before adding item to cart * * @param el object that triggered the call * @return void */ var configuratorToCartBefore0f66ba09c0b64d9585c80ab76b5de03a = function(el) { return configuratorToCartBefore('0f66ba09c0b64d9585c80ab76b5de03a',el); } /** * Callback to use before creating PDF * * @param el object that triggered the call * @return void */ var configuratorToPdfBefore0f66ba09c0b64d9585c80ab76b5de03a = function(el) { return configuratorToPdfBefore('0f66ba09c0b64d9585c80ab76b5de03a',el); } /** * Callback to use after adding item to cart * * @param data array AJAX response with full (new) order * @return void */ var configuratorToCartAfter0f66ba09c0b64d9585c80ab76b5de03a = function(data) { return configuratorToCartAfter('0f66ba09c0b64d9585c80ab76b5de03a',data); } // Google analytics data var trackDataItem0f66ba09c0b64d9585c80ab76b5de03a = { name:'Alu Terrassenüberdachung TR15', brand:'Teranda', category:'shop/terrassenueberdachung/bausatz-tr15', variant:'4.500 x 5.060 mm 6 Standardfarben', price: '3757' } // Run after page load$(function(){ // Main elements var el = $( '#e9842939e57e4814a18d6aca4fbb74dd, .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd' ); // Enable tooltip for valid step count $("body").tooltip({ selector: '.orderout-add-line-wrapper', trigger: 'hover focus' });// Show first tab of item info$( '.catalogview-moreinfo .nav-tabs a:first', el ).tab( 'show' );// Start carousel of images$( '.carousel' , el ).carousel({interval: false}); // Init CatalogView instance var catalogView = Singleton.instance( 'CatalogView' ); catalogView.init(); catalogView.detail(); // Switch to alternative item on select change $('body').on('change', '.alternative-select', function(){ var val = $(this).val(); if(empty(val)) return; location.href = '/shop/produkt!' + val; }); // Convert all images to be responsive var imgs = $('.catalogview-related img',el); imgs.each(function(){ var _this = $(this); _this.addClass('img-responsive img-fluid'); }); // Enable buttons for radio selection $('.catalogview-configurator .btn',el).button(); // Loop through all select-configurable elements to determine which select-comment fields have to be displayed $('.select-configurable:not(.select-comment)', el).each(function(key, value) { var elTitle = $(this).data("title"); var elChecked = $(this).hasClass("active"); var elStep = $(this).closest('.step'); $( '.select-configurable.select-comment', elStep).each(function(k,v) { if ($(this).data("title") == elTitle) { if (elChecked) { $(this).show(); } else { $(this).hide(); } } }); }); $('.checkbox .select-optional',el).on('click',function(){ $('.checkbox .select-optional').removeClass('active'); $('.checkbox .select-optional').has('input:checked').addClass('active'); }); $('.radio .select-configurable',el).on('click',function(e){ e.preventDefault(); var el = $( '#e9842939e57e4814a18d6aca4fbb74dd, .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd' ); var elClick = $(this); var elStep = $(this).closest('.step'); $('.radio .select-configurable', elStep).removeClass('active'); var checked = $('input',this).is(':checked'); if (checked) { $('input', this).prop('checked', false); $(this).removeClass('active'); $('.select-configurable', elStep).show(); } else { $('input', this).prop('checked', true); $(this).addClass('active'); // $('.select-configurable:not(.active)', elStep).hide(); } if($('input:checked', elStep).length > 0) { elStep.removeClass('invalid').addClass('valid'); } else { elStep.removeClass('valid').addClass('invalid'); } catalogViewConfigurator.validateStep(elClick, el); catalogViewConfigurator.updateResult(el); }); /* $('.select-configurable',el).on('click',function(){ var elStep = $(this).closest('.step'); if(elStep.has('input:checked')) { elStep.removeClass('invalid').addClass('valid'); } else { elStep.removeClass('valid').addClass('invalid'); } // Validate step catalogViewConfigurator.validateStep($(this), el); }); */ // Update after changes in .select-configurable.select-comment options to validate steps $('.select-configurable.select-comment',el).on('keyup',function(){ $(this).addClass("active"); catalogViewConfigurator.updateResult(el); // Validate step catalogViewConfigurator.validateStep($(this), el); }); // But do nothing when click on textarea $('.select-configurable textarea,.select-optional textarea',el).on('click', function (e) { e.stopPropagation(); }); // Button to reset all $('.configuration-reset',el).on('click', function () { confirm('Möchten Sie Ihre Konfiguration zurücksetzen?',function(){ var el = $( '#e9842939e57e4814a18d6aca4fbb74dd, .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd' ); var els = $('.select-configurable,.select-optional,.select-configurable input,.select-configurable textarea,.select-optional input',el) els.removeClass('active'); els.closest('.step').removeClass('valid invalid'); els.prop('checked', false); $('.select-configurable textarea',el).prop('value', ''); confirm(false); // Allow button to gain active state, then re-parse result catalogViewConfigurator.updateResult(el); }); }); // Use colorbox for images in options, open on click, but do not select option $('.selection-image-zoom',el).on('click', function (e) { $(this).colorbox({open:true}); return false; }); catalogViewConfigurator.updateResult(el); // Make all selection options in every step equal height $('.step-selection-thumbnails',el).each(function(){ equalElementHeight($('label',$(this))); }); // Function to use correct location of scrolling/affix element window.setAffix = function(el,elParent) { if(el==null) return; if(empty(elParent)) elParent = $('body'); var mainTop = elParent.offset().top; var stickyTop = 0; $('.container-sticky').each(function() { stickyTop += $(this).outerHeight(true); }); if (empty(stickyTop)) stickyTop = 20; var mainHeight = elParent.outerHeight(); var mainBottom = $('body').height() - mainTop - mainHeight; var affixLeft = el.parent().parent().parent().offset().left; var affixTop = stickyTop + elParent.offset().top; var affixWidth = el.outerWidth(true) - 1; var titleHeight = $('.catalogview-title', elParent).outerHeight(true); // Correct alignment on sticky top stickyTop += 10; el.on('affixed.bs.affix',function(){ $(this).css({'left':affixLeft,'top':(affixTop-mainTop) + titleHeight,'width':affixWidth}); }); el.on('affixed-top.bs.affix',function(){ $(this).css({'left':0,'top':0,'width':affixWidth}); }); el.on('affixed-bottom.bs.affix',function(){ $(this).css({'left':0,'top':0,'width':affixWidth}); }); el.affix({offset:{top: (mainTop-stickyTop),bottom:mainBottom}}); }; window.setAffixTitle = function(el,elParent) { if(el==null) return; if(empty(elParent)) elParent = $('body'); var mainTop = elParent.offset().top; var stickyTop = 0; $('.container-sticky').each(function() { stickyTop += $(this).outerHeight(true); }); if (empty(stickyTop)) stickyTop = 20; var affixTop = stickyTop + elParent.offset().top; // Correct alignment on sticky top stickyTop += 10; el.on('affixed.bs.affix',function(){ $(this).css({'top':affixTop-mainTop}); }); el.on('affixed-top.bs.affix',function(){ $(this).css({'top':0}); }); el.on('affixed-bottom.bs.affix',function(){ $(this).css({'top':0}); }); el.affix({offset:{top: mainTop-stickyTop}}); }; // Set position of configuration result var viewport = responsiveSizeDetect(); if(viewport=='xs') { // Place in footer and stick to bottom var footerHtml = '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; $('.catalogview-configurator-result:not(.catalogview-configurator-result-mobile)',el).wrap(footerHtml); $('.loc-mobile-e9842939e57e4814a18d6aca4fbb74dd').prependTo($('footer')); } else { // Make sure the location and width of the affix element stays the same, and stays within the catalog item element setTimeout(function(){ var el = $( '#e9842939e57e4814a18d6aca4fbb74dd, .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd' ); window.setAffix($('.catalogview-configurator-result:not(.catalogview-configurator-result-mobile)'), el); window.setAffixTitle($('.catalogview-title'), el); },2000); } // On resize re-calculate positions and size of the affix var changeWidth = $(window).width(); $(window).on('resize', function() { // Return if width is not changed if ($(this).width() == changeWidth) { return false; } changeWidth = $(this).width(); var el = $( '#e9842939e57e4814a18d6aca4fbb74dd, .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd' ); var viewport = responsiveSizeDetect(); if(viewport=='xs') { // Place in footer and stick to bottom var footerHtml = '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; footerHtml += '
'; // Check if mobile setup needs to be created if ( $('.catalogview-configurator-result',el).parent().hasClass('catalogview-info')) { $('.loc-mobile-e9842939e57e4814a18d6aca4fbb74dd', 'footer').remove(); $('.catalogview-configurator-result',el).wrap(footerHtml); $('.loc-mobile-e9842939e57e4814a18d6aca4fbb74dd').prependTo($('footer')); } else { $('.catalogview-configurator-result', el).attr('style', ''); } // Remove desktop attributes $(window).off('.affix'); $(window).off('.affix-top'); $(window).off('.affix-bottom'); $('.catalogview-configurator-result', el).attr('style', ''); } else { if ( $('.catalogview-configurator-result',el).parent().hasClass('catalogview-info')) { $('.catalogview-configurator-result', el).removeClass('affix'); $('.catalogview-configurator-result', el).removeClass('affix-bottom'); $('.catalogview-configurator-result', el).removeClass('affix-top'); $('.catalogview-configurator-result', el).attr('style', ''); if (!$('.catalogview-configurator-result', el).hasClass('affix')) { window.setAffix($('.catalogview-configurator-result'),el); } if (!$('.catalogview-title', el).hasClass('affix')) { window.setAffixTitle($('.catalogview-title'),el); } } else { // Remove mobile html $('.catalogview-configurator-result',el).appendTo($('.catalogview-info', el)); $('.catalogview-configurator-result', el).removeClass('affix'); $('.catalogview-configurator-result', el).removeClass('affix-bottom'); $('.catalogview-configurator-result', el).removeClass('affix-top'); $('.catalogview-configurator-result', el).attr('style', ''); if (!$('.catalogview-configurator-result', el).hasClass('affix')) { window.setAffix($('.catalogview-configurator-result'),el); } if (!$('.catalogview-title', el).hasClass('affix')) { window.setAffixTitle($('.catalogview-title'),el); } $('.loc-mobile-e9842939e57e4814a18d6aca4fbb74dd', 'footer').remove(); } } }); // Button for creating PDF // Hide offer pdf button when shopping cart is on the page if($('.entity-shopcart').length) $('.catalog-configurator-pdf',el).hide(); else $('.catalog-configurator-pdf',el).on('click',function() { var el = $(this); // Call preprocess function (to asjust values before actually posting data) if (el.attr('data-preprocess')) { var pp = eval(el.attr('data-preprocess')); pp.call(this, el); } // Get all values var values = { catalogitem : "", catalogitemextra: "", selectcomments: "", userdata: "" }; if (el.attr('data-item')) values['catalogitem'] = el.attr('data-item'); if (el.attr('data-item-extra')) values['catalogitemextra'] = el.attr('data-item-extra'); // if (el.attr('data-item-selectcomments')) values['selectcomments'] = el.attr('data-item-selectcomments'); if (el.attr('data-item-userdata')) values['userdata'] = el.attr('data-item-userdata'); //Generate url to open offer in PDF format with correct params var dataExtra = { "catalogitemextra": values["catalogitemextra"], // "selectcomments" : values["selectcomments"], "userdata": values["userdata"] }; var url = catalogViewConfigurator.getPdfLink(values["catalogitem"], JSON.stringify(dataExtra)); window.open(url, '_blank'); loader(false); $(el).prop('disabled',false); }); // Google Analytics, show item detail track('addImpression', trackDataItem0f66ba09c0b64d9585c80ab76b5de03a); track('addProduct', trackDataItem0f66ba09c0b64d9585c80ab76b5de03a); track('setAction', 'detail'); // No event needed, pageview will be tracked //Activate tooltip info icon in steps $('[data-toggle="tooltip"]').tooltip(); // Popup for step info details $('.step-configurable .step-info', el).on('click', function() { var stepInfo = $(this).attr('data-description'); if (!empty(stepInfo)) { alert(stepInfo); // Set a close button in header along with modal header in alert box var prependModalHtml = '
'; $('#alert .modal-content').prepend(prependModalHtml); // Make sure to remove the modal header after it closes (this is not a default element) $("#alert").on('hide.bs.modal', function(){ $('.modal-header', '#alert').remove(); }); } }); // Popup for product info details $('body').on('click', '.action-productinfo-show', function() { alert({ text: $('#modal-catalogview-product-info').html() }); // Correct tab functionality for modals $('.modal .modal-catalogview-product-info-content .nav-tabs li a').each(function(key, value) { var prefix = 'modal-tab-'; var href = $(this).attr('href'); $(this).attr('href', '#' + prefix + href.substr(1)); }); $('.modal .modal-catalogview-product-info-content .tab-pane').each(function(key, value) { var prefix = 'modal-tab-'; $(this).attr('id', prefix + $(this).attr('id')); }); }); // Set color / image data from first option on start var elMobile = $( '.loc-mobile-e9842939e57e4814a18d6aca4fbb74dd' ); var firstEl = $('.step-configurable:first .select-configurable:first', el); var firstStep = firstEl.closest('.step'); firstStep.addClass('current-step'); if (firstEl.length > 0) { var color = $(firstEl).attr('data-color'); var image = $(firstEl).attr('data-image'); if (image && color) { catalogViewConfigurator.configuratorData.color = color; var imageData = JSON.parse(image); // Set the image based on color if (!empty(imageData)) { for (var i in imageData) { if (imageData[i]['title'] == catalogViewConfigurator.configuratorData.color) { var imageUrl = imageData[i]['url']; if (!empty(imageUrl)) { // Set main image src $('.catalogview-image-main .catalogview-image-main-img', el).attr('src', imageUrl); // Set mobile picture (every step contains its own picture) $('.mobile-main-image .mobile-main-image-img', firstStep).attr('src', imageUrl); } } } } } } // Select first option on start $('.action-confirm-step', el).on('click', function() { catalogViewConfigurator.confirmStep($(this), el); catalogViewConfigurator.updateResult(el); }); $('.action-edit-step', el).on('click', function() { var elStep = $(this).closest('.step'); elStep.addClass('current-step'); elStep.removeClass('processed').addClass('not-processed').removeClass('valid'); $('.select-configurable input', elStep).prop('checked', false); $('.select-configurable', elStep).show(); $('.select-configurable', elStep).removeClass('active'); $('.action-confirm-step', elStep).attr('disabled', true); //$('.select-configurable.select-comment textarea', elStep).val(''); catalogViewConfigurator.updateResult(el); catalogViewConfigurator.validateStep($(this)); }); // Trigger carousel via custom button $('.action-photos-show', el).on('click', function () { $('.catalogview-images .carousel .colorbox:first-child', el).trigger('click'); }); // Show all details $('.action-details-show', el).on('click', function() { $('.modal-body-extra').remove(); var el = $( '#e9842939e57e4814a18d6aca4fbb74dd, .loc-mobile-e9842939e57e4814a18d6aca4fbb74dd'); var $cloneModal = $($('#modal-catalogview-summary-info', el).html()); // Reset information $($cloneModal).remove('tbody tr'); // Gather all information var priceTotal = $('.result-price-total:first', el).text(); // Replace information $('.data-total-price',$cloneModal).text(priceTotal); // Loop all steps $('.step-sub .step', el).each(function(key, value) { var elStep = $(this); var activeConfigEls = $('.select-configurable.active', elStep); var selectCommentEls = $('.select-comment', elStep); var elChoice = elStep.find('.select-configurable.active'); var choiceText = $('.selection-title', elChoice).html(); if (empty(choiceText)) choiceText = ''; var stepImage = elStep.find('.mobile-main-image-img').attr('src'); var stepNumber = $('.step-count', elStep).text(); var stepTitle = $('.step-title', elStep).text(); // Create html row to append var htmlRow = '
' + stepTitle + '
'; if (!empty(activeConfigEls)) { $(activeConfigEls).each(function(key, value) { var textRow = '- '; var hasRadio = $(this).parent().hasClass('radio'); var selectionTitle = $('.selection-title', this).text(); var selectionPrice = $('.selection-price', this).text(); if (hasRadio) { textRow += selectionTitle + ''; if (!empty(selectionPrice)) { textRow += '+' + selectionPrice + '
'; } htmlRow += textRow; } }) } if (!empty(selectCommentEls)) { $(selectCommentEls).each(function(key, value) { var textRow = '- '; var hasText = !empty( $('textarea', this).val()) ? true : false; if (hasText) { var selectionTitle = $('.selection-title', this).text(); var selectionValue = $('textarea', this).val(); var selectionPrice = $('.selection-price', this).text(); textRow += selectionTitle + ': ' + selectionValue + '
'; if (!empty(selectionPrice)) { textRow += '+' + selectionPrice + ''; } htmlRow += textRow; } }) } htmlRow += '
'; $('.element-steps tbody', $cloneModal).append(htmlRow); }); alert({ modal: true, title: __('detailsconfigurator'), text: $($cloneModal).html() }); // Set a close button in header along with modal header in alert box var prependModalHtml = '
'; $('#alert .modal-content').prepend(prependModalHtml); // Make sure to remove the modal header after it closes (this is not a default element) $("#alert").on('hide.bs.modal', function(){ $('.modal-header', '#alert').remove(); }); }); // Init product params catalogViewConfigurator.initProductcombinationParams(); });
Alu Terrassenüberdachung TR15konfigurationIhr Preisinkl. 19% MwSt, zzgl. Versandkosteninkl. 19% MwSt. Sie sparen:
Noch Konfigurationsschritt(e) bis zum Ziel.
Details
Produktbeschreibung / Lieferumfang
Speditions-Versand (15-20 Werktage)
Hersteller | Teranda |
modell | TR15 mit Polycarbonat oder Glas |
Version | Außenbreite 4061-5060 mm Dachtiefe 4001-4500 mm |
Größe | 4.500 x 5.060 mm |
Farbe | 6 Standardfarben |
Speditions-Versand (15-20 Werktage) |
- Bezeichnung
Bezeichnung
Bausatz Alu-Terrassenüberdachung 506x450 cm (5x4,5 Meter)
Mit unseren Heimwerker-Bausätzen für die Selbstmontage können Sie sich Ihren Wunsch nach einem ästhetisch ansprechenden und robusten Terrassendach in kürzester Zeit kostengünstig erfüllen. Wir stellen die Alu-Profile in Eigenproduktion her und können daher ab Lager liefern.Mit der ausführlichen Montageanleitung ist der Aufbau für Heimwerker keine große Herausforderung. Innerhalb kürzester Zeit ist die Montage abgeschlossen.Zusätzlicher Vorteil: Terrassendächer vonTeranda sind nach dem Baukastenprinzip konstruiert und jederzeit problemlos erweiterbar. Grundsätzlich sind unsere Terrassenüberdachungen füreine Schneelast bis zu 1,25 kN/qm geeignet.
Aufmaß
Nutzen Sie unserAufmaß-Tool für die Berechnung der Bestellmaße, Dachneigung, Montagehöhe Hauswand und Durchgangshöhe Rinnenprofil.
Maßanfertigung
Wir stellen die Alu-Profile für Terrassenüberdachungenmit standardisierten Längen- und Tiefenmaßen her (ganze und halbe Meter). Eine Anfertigungauf Wunschmaß ist allerdings auch möglich. Eine Kürzung der Profile, passend zu Ihren Abmessungen, ist gratis für Sie.
Konstruktionsart
- Typ 1: Wandmontage
- Typ 2: freistehende Konstruktion
Lieferumfang Terrassenüberdachung 506x450 cm
- Rinnenprofil+ Zierblende(rund,geradeoder klassisch)
- Wandprofil
- Pfosten 111x111 mm
- Querträgerinkl. Alu-Deckleisten
- Klickblenden(für Wand- und Rinnenprofil)
- Plattenstopper
- Auflage- und Dichtungsgummis
- Endkappen für Rinnen- und Wandprofil
- Montageschrauben
- Profile für freistehende Konstruktion(falls zutreffend)
- Dacheindeckung(Polycarbonat oder Glas)
- Kondensprofilefür Polycarbonat-Platten +Anti-Dusttape (Dacheindeckung aus Polycarbonat)
- Seitenteile oder Zubehör(falls zutreffend)
Technische Informationen
- Empfohlene Dachneigung: 8 Grad (ca 14 cm pro Meter)
- Dacheindeckung mit Glas: Gefälle möglich von 5 bis 10 Grad
- Dacheindeckung mit Polycarbonat: Gefälle möglich von8 bis 10 Grad
- Empfohlene Durchgangshöhe: 2200mm
- Montagehöhe Wandprofil: abhängig von der Dachneigung und der Durchgangshöhe Rinnenprofil. Siehe Aufmaß-Tool.
Grundpreis € 3.757,00
Ihr Preis
01.Schritt1Abmessungen & Konstruktion
01.Schritt1.1Gestellfarbe
Gestellfarbe
Unsere Aluminiumprofile sind mit einer Qualicoat-Pulverbeschichtung versehen. Dies bedeutet, dass die Lackierung hohen Konservierungs- und Qualitätsstandards entspricht. Die Teranda-Terrassenüberdachung und verwandte Produkte sind in 6 Standardfarben erhältlich. Das Qualanod-Qualitätszeichen gilt für eloxierte Profile.
RAL7016st (Anthrazitstruktur)
RAL9007st (Grau Aluminiumstruktur)
RAL9006st (Weiß Aluminiumstruktur)
RAL9005st (Schwarz Aluminiumstruktur)
RAL9016st (Verkehrsweiß glänzend)
02.Schritt1.2Bestellmaße
Bestellmaß
Für die Bestellung einer Terrassenüberdachung sind verschiedene Größen erforderlich. Für eine korrektes Aufmaß ist es wichtig, dass die Oberfläche 90 Grad ist.
Breite
Das Breitenmaß ist das Maß zwischen den beiden äußeren Pfosten von Außenkante zu Außenkante. Die mögliche Breite für eine Terrassenüberdachung mit Polycarbonat liegt zwischen 500 mm und 20060 mm.
Tiefe Terrassenüberdachung mit Wandmontage
Das Tiefenmaß für eine Terrassenüberdachung mit Wandbefestigung ist das Maß zwischen der Hauswand und der Außenkante der vorderen Pfosten. Die mögliche Tiefe liegt bei einer Dacheindeckung mit Polycarbonat zwischen 1000 mm und 5000 mm. Bei einer Dacheindeckung mit VSG ist eine maximale Tiefe von 4000 mm möglich.
Tiefe Terrassenüberdachung als freistehende Konstruktion
Bei einer freistehenden Terrassenüberdachung ist die Gesamttiefe (inkl. 120 mm Statikbalken) der Abstand zwischen der Hauswand und der Außenkante der vorderen Pfosten.
Breite (mm)5060
Geben Sie hier die Breite in mm ein.
(Min. 1000 mm / Max. 12060 mm)
Standardmaße: 3060, 4060, 5060, 6060 usw. Zwischenmaße sind auch möglich.
Bitte nur Ziffern eingeben.
Tiefe (mm)4500
Geben Sie hier die Tiefe in mm ein.
Wichtig:
Max. Tiefe mit Glas 4000 mm.
Max. Tiefe mit Polycarbonat 5000 mm.
03.Schritt1.3Durchgangshöhe Rinnenseite
Durchgangshöhe Rinnenseite
Diese Höhe wird auch als Durchgangshöhe bezeichnet und ist das Maß zwischen der Bodenfläche und der Unterkante der Rinne. Wir empfehlen eine Durchgangshöhe von 2200 mm.
Montagehöhe Unterkante Rinnenprofil (mm)2200
Geben Sie hier die gewünschte Durchgangshöhe (Rinnenseite) in mm ein. Wir empfehlen 2200 mm.
04.Schritt1.4Konstruktionsart
Konstruktionsart
Sie können die Terrassenüberdachung mit Wandmontage oder als freistehende Konstruktion bestellen.
Terrassenüberdachung für Wandmontage
Ist die Hauswand zur Befestigung des Wandprofils geeignet, kann dieses direkt an der Hauwand montiert werden. An der Vorderseite wird die Terrassenüberdachung von, je nach Breite, zwei oder mehr Pfosten gestützt.
Terrassendach als freistehende Konstruktion
Bei einer freistehenden Konstruktion wird das Wandprofil nicht an der Hauswand, sondern an einem Statikbalken befestigt. Dieser Statikbalken wird von, je nach Breite, zwei oder mehr Pfosten gestützt. Diese Konstruktionsart eignet sich perfekt für den Aufbau in einer freien Umgebung, da keine Hauswand nötigt ist, an der das Wandprofil befestigt werden muss. Zudem ist sie optimal geeignet, wenn Sie keine Löcher in Ihre Hauswand bohren möchten oder Sie unsicher sind, ob Ihre Hauswand für die Befestigung des Wandprofils geeignet ist.
Sonstige Angaben
Wenn Sie sich für eine freistehende Konstruktion entscheiden, entspricht der Lieferinhalt dem einer Terrassenüberdachung für die Wandmontage, enthält jedoch die zusätzlichen Profile für die freistehende Konstruktion:
• zusätzliche Pfosten 111x111 mm
• 1x Statikbalken
• 2x Endkappen-Statikbalken
Wir empfehlen, die hinteren Pfosten (unter dem Statikbalken) in mindestens 50 cm Beton einzubetonieren. Dies gibt der Konstruktion die erforderliche Stabilität. Wenn es nicht möglich ist, die Pfosten einzubetonieren, ist es sehr wichtig, den Statikbalken an 2-3 Punkten an der Hauswand zu befestigen.
05.Schritt1.5Pfostenlänge Rinnenseite
Pfostenlänge Rinnenseite
Wir liefern die Pfosten in drei verschiedenen Längen: 2500 mm, 3000 mm und 3500 mm. Sie bestimmen die Länge des Pfostens anhand der gewünschten Durchgangshöhe und der Art des verwendeten Fundaments. Die Pfosten können dann selbst auf die erforderliche Länge gekürzt werden.
Überprüfen Sie, ob die Oberfläche der Terrasse für die Montage der Pfosten geeignet ist. Wenn der Untergrund nicht stabil ist, empfehlen wir die folgenden zwei Optionen:
Option 01*
Sie erstellen ein Fundament (Größe ca. 30x30x80 cm). Mithilfe von Alu U-Profilen befestigen Sie die Pfosten auf dem Fundament.
Option 02*
Sie graben ein Loch von ca. 40x40x80 cm. Legen Sie den (im Lieferumfang enthaltenen) Betonblock auf den Boden des Lochs und bestimmen Sie die Länge des Pfostens. Sorgen Sie dafür, das sein 90 Grad Winkel gegeben ist und montieren Sie den Pfosten (mit einem L-Profil oder einem U-Profil) auf dem Betonblock. Wickeln Sie den Teil des Pfostens unter der Oberfläche in Plastik ein und füllen Sie das Loch mit Beton aus.
* Die Beschaffenheit des Untergrunds ist ausschlaggebend dafür, welches Fundament das Richtige ist und wie die Pfosten befestigt werden müssen. Jede Baustelle ist einzigartig und muss von einem Experten bewertet werden.
06.Schritt1.6Pfostenbefestigung
Pfostenbefestigung
Wenn Sie die Pfosten direkt auf der Oberfläche befestigen, haben Sie die Wahl zwischen zwei Arten von Befestigungen. Die Pfosten werden standardmäßig mit L-Profilen geliefert. Optional können Sie U-Profile mit Unterlegscheiben wählen.
L-Profil
Standardmäßig werden Aluminium-L-Profile geliefert. Dieses Profil ist nicht mit Bohrlöchern zur Befestigung am Untergrund versehen. Bei diesem Profil müssen Sie die Löcher mit einem Metallbohrer (8 mm) selbst bohren. Der Pfosten wird bei der Montage über das L-Profil geschoben. Dieses Profil ist nach der Montage nicht mehr sichtbar. Wenn die Pfosten unter der Erde in Beton gegossen werden, können die L-Profile auch an der Außenseite des angebracht werden.
U-Profil
Dieses optionale Profil bietet gegenüber dem L-Profil einige Vorteile. Das U-Profil besteht aus Edelstahl und hat zwei Bohrlöcher zur Befestigung am Untergrund. Aufgrund seiner Form sitzt das U-Profil stabiler im Pfosten und liegt auf einer Kunststoffbodenplatte auf, die Korrosion verhindert.
07.Schritt1.7Dachneigung
Dachneigung
Die Terrassenüberdachung muss, um zu verhindern, dass sich beispielsweise Wasser, Schnee und Schmutz auf der Dachoberfläche ansammeln, mit einer bestimmten Dachneigung aufgebaut werden. Bei einer Terrassenüberdachung mit VSG Dacheindeckung, können Sie zwischen einer Dachneigung von 5 - 10 Grad wähen. Wenn Sie sich für Polycarbonat als Dacheindeckung entscheiden, empfehlen wir eine Dachneigung von 8 Grad. Bei einer geringeren Dachneigung verfällt die Herstellergarantie auf die Polycarbonatplatten.
Beispiel Dachneigung 8 Grad
Das folgende Beispiel zeigt eine Terrassenüberdachung mit einer Tiefe von 3000 mm und einer Dachneigung von 8 Grad. Das Gefälle beläuft sich hier auf ca 14 cm pro Meter. Berechnung: 3 x 14 cm = 42 cm.
09.Schritt2Optik & Zubehör
08.Schritt2.1Rinnenblende
Rinnenblende
Dieses Profil dient der optischen Gestaltung der Vorderseite des Rinnenprofils. Die Blende wird auf das Rinnenprofil geklickt und mit selbstschneidenden Schrauben befestigt. Die beiden offenen Seiten der Rinne werden mit entsprechenden Abdeckkappen geschlossen. Sie haben die Wahl zwischen einer runden, geraden oder klassischen Variante.
09.Schritt2.2LED-Beleuchtung
LED- Beleuchtung
Optional können Sie das Dach mit integrierter LED-Beleuchtung ausstatten. Die minimalistisch gestalteten LED-Spots werden in den Querträgern verbaut. Wir empfehlen zwei Spots pro innenliegendem Querträger. Der Transformator wird im Wandprofil platziert und durch die Abdeckkappen verdeckt, so dass dieser nicht mehr sichtbar ist. Wir bieten verschiedene Pakete an:
Impression TR15 mit LED-Beleuchtung
Fernbedienung und LED-Strahler
Übersicht Verbindung
LED-Set 6x 3W inkl. Fernbedienung
LED-Set 8x 3W inkl. Fernbedienung
LED-Set 10x 3W inkl. Fernbedienung
LED-Set 12x 3W inkl. Fernbedienung
10.Schritt2.3Lieferoptionen
Montageset Terrassendächer für Heimwerker
Für eine einfache Selbstmontage empfehlen wir Ihnen unser Montageset für Heimwerker.
Fallrohr
Schmutzfänger, PVC Fallrohr und PVC Rohrbogen. Regenwasserabfluss wird in einen der Pfosten eingearbeitet.
Lochsäge
Vor der Montage werden Löcher in die Rinne und in die Unterseite des Pfostens für den Wasserablauf gebohrt.
Spezial-Silikon
Für die Fuge zwischen Wand und Wandprofil und zur Versiegelung der Klickprofile.
Kompriband
Dichtungsband zur Versiegelung des Wandprofils.
Alu-Anschraubwinkel
Für Montage der Pfosten auf ein vorhandenes Fundament.
Betonsockel
(30x20x10) Erforderlich für ein Punktfundament.
13.Schritt3Dachplatten
11.Schritt3.1Dacheindeckung
Dacheindeckung
Vom Klarglas (VSG) bis zum matten hitzebeständigen Polycarbonat. Sie entscheiden, welche Dacheindeckung Ihren Bedürfnissen am besten entspricht. Unsere Polycarbonatplatten haben eine Top X-Struktur. Diese Struktur bietet eine extrem starke Konstruktion, die noch stärker als Glas ist.
16mm Polycarbonat OPAL
Bei dieser Option Liefern wir Ihre Terrassenüberdachung inklusive mattem Polycarbonat, welches eine geringere Lichtdurchlässigkeit (55%) hat.
16mm Polycarbonat KLAR
Bei dieser Option Liefern wir Ihre Terrassenüberdachung inklusive klarem Polycarbonat, welches eine hohe Lichtdurchlässigkeit (64%) hat.
16mm Polycarbonat REFLEX PEARL (Heatblock)
Bei dieser Option Liefern wir Ihre Terrassenüberdachung inklusive mattem, hitzebeständigem Polycarbonat., welches eine Lichtdurchlässigkeit von 28% hat. Zudem verfügt dieses Polycarbonat über eine integrierte Hitzeschutzfolie.
VSG 44.2 KLAR
Bei dieser Option erhalten Sie eine Terrassenüberdachung inklusiv klarem 44.2.VSG. Das Glas hat eine Dicke von 8,76 mm. Wichtig: die maximale Tiefe mit Glaseindeckung ist 4000 mm.
VSG 44.2 MATT
Bei dieser Option erhalten Sie eine Terrassenüberdachung inklusiv mattem 44.2.VSG. Das Glas hat eine Dicke von 8,76 mm. Wichtig: die maximale Tiefe mit Glaseindeckung ist 4000 mm.
15.Schritt4Seitenteile
12.Schritt4.1Seitenteil links (von Innen gesehen)
Seitenteil links (von innen gesehen)
In diesem Konfigurator können Sie die Terrassenüberdachung mit einem Klick um Seitenwände erweitern. Wir haben die gängigsten Optionen für Sie aufgelistet. Wenn Ihre Option nicht aufgeführt ist oder Sie eine Festwand und / oder eine Schiebewand separat konfigurieren möchten, können Sie dies tun, nachdem Sie die Konfiguration der Terrassenüberdachung abgeschlossen und auf "IN DEN WARENKORB" geklickt haben.
13.Schritt4.2Seitenteil rechts (von Innen gesehen)
Seitenteil rechts (von innen gesehen)
In diesem Konfigurator können Sie die Terrassenüberdachung mit einem Klick um Seitenwände erweitern. Wir haben die gängigsten Optionen für Sie aufgelistet. Wenn Ihre Option nicht aufgeführt ist oder Sie eine Festwand und / oder eine Schiebewand separat konfigurieren möchten, können Sie dies tun, nachdem Sie die Konfiguration der Terrassenüberdachung abgeschlossen und auf "IN DEN WARENKORB" geklickt haben.
18.Schritt5Vorne
14.Schritt5.1Vorderwand (Feld 1)
Vorderwand
In diesem Konfigurator können Sie die Terrassenüberdachung mit einem Klick mit Elementen an der Vorderseite erweitern. Abhängig von der Anzahl der vorderen Felder haben Sie pro Feld die Wahl, es offen zu lassen, eine Festwand oder eine Schiebewand zu integrieren. Wenn Ihre Option nicht aufgeführt ist oder Sie eine Festwand und / oder eine Schiebewand separat konfigurieren möchten, können Sie dies tun, nachdem Sie die Konfiguration der Terrassenabdeckung abgeschlossen und auf "IN DEN WARENKORB" geklickt haben.
15.Schritt5.2Vorderwand (Feld 2)
config-0039
Alu Terrassenüberdachung TR15konfigurationIhr Preisinkl. 19% MwSt, zzgl. Versandkosten
Speditions-Versand (15-20 Werktage)
Bezeichnung
Bausatz Alu-Terrassenüberdachung 506x450 cm (5x4,5 Meter)
Mit unseren Heimwerker-Bausätzen für die Selbstmontage können Sie sich Ihren Wunsch nach einem ästhetisch ansprechenden und robusten Terrassendach in kürzester Zeit kostengünstig erfüllen. Wir stellen die Alu-Profile in Eigenproduktion her und können daher ab Lager liefern.Mit der ausführlichen Montageanleitung ist der Aufbau für Heimwerker keine große Herausforderung. Innerhalb kürzester Zeit ist die Montage abgeschlossen.Zusätzlicher Vorteil: Terrassendächer vonTeranda sind nach dem Baukastenprinzip konstruiert und jederzeit problemlos erweiterbar. Grundsätzlich sind unsere Terrassenüberdachungen füreine Schneelast bis zu 1,25 kN/qm geeignet.
Aufmaß
Nutzen Sie unserAufmaß-Tool für die Berechnung der Bestellmaße, Dachneigung, Montagehöhe Hauswand und Durchgangshöhe Rinnenprofil.
Maßanfertigung
Wir stellen die Alu-Profile für Terrassenüberdachungenmit standardisierten Längen- und Tiefenmaßen her (ganze und halbe Meter). Eine Anfertigungauf Wunschmaß ist allerdings auch möglich. Eine Kürzung der Profile, passend zu Ihren Abmessungen, ist gratis für Sie.
Konstruktionsart
- Typ 1: Wandmontage
- Typ 2: freistehende Konstruktion
Lieferumfang Terrassenüberdachung 506x450 cm
- Rinnenprofil+ Zierblende(rund,geradeoder klassisch)
- Wandprofil
- Pfosten 111x111 mm
- Querträgerinkl. Alu-Deckleisten
- Klickblenden(für Wand- und Rinnenprofil)
- Plattenstopper
- Auflage- und Dichtungsgummis
- Endkappen für Rinnen- und Wandprofil
- Montageschrauben
- Profile für freistehende Konstruktion(falls zutreffend)
- Dacheindeckung(Polycarbonat oder Glas)
- Kondensprofilefür Polycarbonat-Platten +Anti-Dusttape (Dacheindeckung aus Polycarbonat)
- Seitenteile oder Zubehör(falls zutreffend)
Technische Informationen
- Empfohlene Dachneigung: 8 Grad (ca 14 cm pro Meter)
- Dacheindeckung mit Glas: Gefälle möglich von 5 bis 10 Grad
- Dacheindeckung mit Polycarbonat: Gefälle möglich von8 bis 10 Grad
- Empfohlene Durchgangshöhe: 2200mm
- Montagehöhe Wandprofil: abhängig von der Dachneigung und der Durchgangshöhe Rinnenprofil. Siehe Aufmaß-Tool.